[d2 campus] 2016 한양대학교 프로그래밍 경시대회 문제풀이
TRANSCRIPT
제 3회 한양대학교프로그래밍 경시대회
문제 해설 및 풀이
Beginner Division
K. We Are In Hanyang University
출제자 : 권기택
최초 정답 팀 : Lucky
K. We Are In Hanyang University
“HANYANG”
출력
D. 데이트하기 좋은 날씨
출제자 : 이현지
최초 정답 팀 : worldbestbeautymisspyun
D. 데이트하기 좋은 날씨
7개의 숫자를 비교하여
숫자가 가장 작은 요일에
해당하는 문자열 출력
A. 불량품 걸러내기
출제자 : 이경준
최초 정답 팀 : jonjalkyungho
A. 불량품 걸러내기
Hanyang
anyangH
nyangHa
yangHan 7개이외의 로고 인덱스 값
angHany 을출력
ngHanya
gHanyan
J. 테러를 막아라
출제자 : 이윤성
최초 정답 팀 : Lucky
J. 테러를 막아라
간단한 경우의 수 문제입니다.
Ai * Bi 들의 합을 출력하면 됩니다.
B. 최고의 치료사
출제자 : 서병기
최초 정답 팀 : LPL
B. 최고의 치료사
(0,0) 부터 (N,N)까지
이중 for문으로 탐색하면서
제일 좋은 위치를 찾아낸다
L. K번째 큰 수 찾기
출제자 : 최기원
최초 정답 팀 : MyDrillDiggingTheSky
L. K번째 큰 수 찾기
수열을 큰 순서대로 정렬한 뒤, K번째 숫자를출력하면 됩니다.
정렬 과정에서
삽입정렬, 버블 소트 등을 이용하면 O(N^2)의시간복잡도로 해결가능하고
머지 소트, 힙 소트 등을 이용하면 O(NlogN)의훨씬 빠른 시간 복잡도로 해결할 수 있습니다.
이 외에도 다양하게 해결할 수 있습니다.
E. 결혼식
출제자 : 오현석
최초 정답 팀 : MyDrillDiggingTheSky
E. 결혼식
입력 N과 K의 값이 매우 작기 때문에
배열이나 리스트 자료구조를 사용해
해당 과정을 그대로 구현하면 됨.
C. 전설의 포켓몬
출제자 : 이현지
최초 정답 팀 : ???
C. 전설의 포켓몬
𝑥𝑑 와 𝑦𝑑의 값은 서로에게 영향을 미치지 않으므로𝑥𝑑 에 대한 기댓값 + 𝑦𝑑에 대한 기댓값 = 기댓값
기댓값은 적분을 통해서 구할 수 있음
0)𝑚3𝑥𝑑
2) / 𝑚 0) +𝑛6𝑦𝑑
2 ) / 𝑛
C. 전설의 포켓몬
계산하면 항상 정수
각각의 a, b에 대해
적분값을 구해 최솟값 출력
0)𝑚3𝑥𝑑
2) / 𝑚 0) +𝑛6𝑦𝑑
2 ) / 𝑛
G. 정 원이와 정원이
출제자 : 이윤성
최초 정답 팀 : ???
G. 정 원이와 정원이
a, b의 2이상 5이하의 서로 다른 두 수 이므로6가지 경우밖에 나오지 않습니다.
각각 6가지 경우에 대한규칙들을 찾으시면 됩니다.
G. 정 원이와 정원이
구슬이 N개일 경우누가 이기는 지를 점화식으로 나타내자면,
f(N) = f(N-1) || f(N-a) || f(N-b)
입니다.
G. 정 원이와 정원이
Jung이라 출력해야할 경우를 J,Won이라 출력해야할 경우를 W라 한다.
i) a=2, b=3 인 경우WWWJ / WWWJ / WWWJ / WWWJ…..
ii) a=3, b=4 인 경우WJWWWWJ / WJWWWWJ….
Beginner / Advanced
BEG-I / ADV-J. 자석 꽂아넣기
출제자 : 현은률
최초 정답 팀 : MyDrillDiggingTheSky
TrumpEmperorOfWorld
BEG-I / ADV-J. 자석 꽂아넣기
백트래킹 처럼 보인다.
실제 : 시간 초과
BEG-I / ADV-J. 자석 꽂아넣기
N =1일때 부터 시도하면
F(N) = F(N-1) + 2(N/2) 임을 알 수 있다.
(짝수일 때 N, 홀수일 때 N+1)
BEG-H / ADV-H. HY 수열
출제자 : NC소프트
최초 정답 팀 : 2ge ChoiSun UU
Etach Jo
BEG-H / ADV-H. HY 수열
H수열 -> 페리 수열
* 페리 수열의 특징
i번째 항은
i-1번째 항과 i+1번 항을
바보셈한 결과와 같다
1
4
1
3
1
2
2
3
3
4
1
1
1
3
1
2
2
3
3
4
BEG-H / ADV-H. HY 수열
항상 첫 항과 마지막 항의 합이 답!첫 항은 항상 1/N, 마지막 항은 1/1이므로
답은 N+1 N을 출력
BEG-F / ADV-I. 보고서 검사
출제자 : 정채홍
최초 정답 팀 : MyDrillDiggingTheSky
llllllll
BEG-F / ADV-I. 보고서 검사
각 문자들의 카운팅을 위한 배열을 만들어도 되고, STL map을 사용하여 카운팅 후 iterator로출력해주시면 됩니다.
제 3회 한양대학교프로그래밍 경시대회
문제 해설 및 풀이
Beginner / Advanced
BEG-I / ADV-J. 자석 꽂아넣기
출제자 : 현은률
최초 정답 팀 : MyDrillDiggingTheSky
TrumpEmperorOfWorld
BEG-I / ADV-J. 자석 꽂아넣기
백트래킹 처럼 보인다.
실제 : 시간 초과
BEG-I / ADV-J. 자석 꽂아넣기
N =1일때 부터 시도하면
F(N) = F(N-1) + 2(N/2) 임을 알 수 있다.
(짝수일 때 N, 홀수일 때 N+1)
BEG-H / ADV-H. HY 수열
출제자 : NC소프트
최초 정답 팀 : 2ge ChoiSun UU
Etach Jo
BEG-H / ADV-H. HY 수열
H수열 -> 페리 수열
* 페리 수열의 특징
i번째 항은
i-1번째 항과 i+1번 항을
바보셈한 결과와 같다
1
4
1
3
1
2
2
3
3
4
1
1
1
3
1
2
2
3
3
4
BEG-H / ADV-H. HY 수열
항상 첫 항과 마지막 항의 합이 답!첫 항은 항상 1/N, 마지막 항은 1/1이므로
답은 N+1 N을 출력
BEG-F / ADV-I. 보고서 검사
출제자 : 정채홍
최초 정답 팀 : MyDrillDiggingTheSky
llllllll
BEG-F / ADV-I. 보고서 검사
각 문자들의 카운팅을 위한 배열을 만들어도 되고, STL map을 사용하여 카운팅 후 iterator로출력해주시면 됩니다.
Advanced Division
E. 369CLAP GAME
출제자 : 권기택
최초 정답 팀 : 4 dollar
E. 369CLAP GAME
K를 P진법으로 변환
1. K%P값을 저장(int형으로 할 시 범위 초과)
2. K=K/P
3. K가 0이 될 때까지 1, 2반복
1에서 저장된 값들과 3, 6, 9, C, L, A, P을 비교하고 진법 변환한 값 혹은 박수를 친다.
C. 디오니소스의 파티
출제자 : 오현석
최초 정답 팀 : Architecture
C. 디오니소스의 파티
입력값의 범위가 크기 때문에
단순히 모든 경우를 돌려보는 것은 불가능.
1차원 DP를 써서 O(LN)에 해결가능
C[i] = i거리까지 도착할 수 있는 최소 시간
C[0] = 0
C[i] = min([MAX_INT]
+ [C[i-dist]+1 for dist in songs if i-dist >= 0])
F. 블록 쌓기
출제자 : 윤승원
최초 정답 팀 : MARCH
F. 블록 쌓기
N <= 10
모든 경우의 수는 최대 10! = 3,628,800
1초에 약 1억번 연산할 수 있기 때문에모든 경우의 수를 재귀함수로 시도해도
시간 안에 답을 구할 수 있다.
B. 7777
출제자 : 허재석
최초 정답 팀 : MARCH
B. 7777
1582년 10월 15일부터 경과한 날을 구하는 함수 get_datestamp(date)를 작성
get_datestamp(“특정 날짜“) –get_datestamp(“마지막 연애날짜“) >= 7777
특정 연도가 윤년인지 판단하는 함수도 만드는것이 좋습니다.
G. 그녀를 찾아서
출제자 : 김정무
최초 정답 팀 : Your team name here
G. 그녀를 찾아서
간단한 최단거리 문제
거리를 저장하는 dist배열을 만듬
상하좌우로 이동하면서 dist배열 갱신
G. 그녀를 찾아서
- 주의점 – 얘가 왼쪽에서온건 알겠는데…방향전환을 한
걸까??
G. 그녀를 찾아서
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
난 위에서 온최단거리야
난 왼쪽에서 온최단거리야
G. 그녀를 찾아서
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
얘는 같은방향에서 왔으니
방향전환을 안했군!!
G. 그녀를 찾아서
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
상
하
좌 우
얘는 다른방향에서왔으니
방향전환을 했군!!
A. 무빙워크 설치할 돈도 없으면 네 실력을 탓해
출제자 : 김종현
최초 정답 팀 : Your team name here
A. 무빙워크 설치할 돈도 없으면 네 실력을 탓해
해설 :모든 건물이 서로 연결되어 있어야 한다최소 스패닝 트리(크루스칼 알고리즘)
무빙워크를 간선으로 생각할 때 금으로 만드는 경우 비용0, 은이면 1, 동이면 10000으로 잡으면 된다.
금으로 만드는 경우 비용이 없기 때문에 항상 은, 동으로 만드는 경우보다 우선적으로 작용한다.
N<10000이므로 항상 은이 동으로 만드는 경우 보다 우선적으로 작용한다.
->크루스칼 알고리즘이 기본적으로 그리디 알고리즘임을 이용함
A. 무빙워크 설치할 돈도 없으면 네 실력을 탓해
전체 비용 : cost
Cost % 10000 silver
(Cost –silver)/10000 bronze
N-1-silver-bronze gold
스패닝 트리 완성이 불가능 할 경우 -1
D. 약물 회수하기
출제자 : 김종현
최초 정답 팀 : ???
D. 약물 회수하기
해설 :
BFS를 통해 약물이 있는 모든 마을 간의 거리를전처리 한다. O(그리드의 크리 *n)
약물의 등급에 따라 각 마을을 정렬한다
O(nlogn)
D. 약물 회수하기
해설 :
DP[현재 위치][앞으로 담을 수 있는 개수][연속]
=> 필요한 최소한의 이동거리
연속으로 담은 횟수가 2 ->다음 위치의 약물등급은현재 위치의 약물보다 등급이 2이상 커야 한다.
아니라면 다음 위치의 약물은 현재 위치의 약물 등급보다 크기만 하면 된다.
D. 약물 회수하기
해설 :DP[현재 위치][앞으로 담을 수 있는 개수][연속]=> 필요한 최소한의 이동거리
DP[now][cnt][suc] = min(DP[next][cnt-1][suc+1], DP[next2][cnt-1][1])
Next는 now위치보다 약물 등급이 1 큰경우Next2는 now위치보다 약물 등급이 2이상인 경우
Cnt가 0인 경우 ->회수를 중단하고 처음위치로 돌아가도록
D. 약물 회수하기
해설 :
DP[현재 위치][앞으로 담을 수 있는 개수][연속]
담을 수 있는 개수를 이분탐색을 통해 재귀적으로 다이나믹 프로그래밍을 진행 ->O(n^3 * logn)
단순히 담을 수 있는 개수를 하나씩 줄이면서 진행
->O(n^4)
O(n^4)의 최적화되지 않은 코드까지 통과되도록 허용
K. 비숍 배치하기
출제자 : 김정무
최초 정답 팀 : ???
K. 비숍 배치하기
이분매칭 문제
K. 비숍 배치하기
한대각선 안에는하나의 비숍만놓을 수 있음
K. 비숍 배치하기
K. 비숍 배치하기
오른쪽으로 내려오는 대각선과왼쪽으로 내려오는대각선 매칭!!
K. 비숍 배치하기
장애물이 있는경우
K. 비숍 배치하기
룩이 있는 경우파란 부분에는 놓을 수 없다.
K. 비숍 배치하기
파란색 부분에서 만나는대각선은 매칭을 시켜주지 않는다.
L. 크리스마스 전구
출제자 : 허재석
최초 정답 팀 : ???
L. 크리스마스 전구
일반적으로 time & space complexity O(NM)에 구할 수 있다.
이 문제는 space complexity를 O(min(N, M))으로 줄이는 것이 목표이다.
L. 크리스마스 전구
두 문자열을 A, B라 할 때
B를 중간 지점에서 나눈 B_left와 B_right를 생각하자.
B_left에 해당하는 LCS를 만들어내는 A의 왼쪽 부분과B_right에 해당하는 LCS를 만들어내는 오른쪽 부분이있다.
물론, 그 A의 왼쪽 부분과 오른쪽 부분은 B를 나눈 경우와 다르게 정확히 절반씩 나누어지지 않을 수 있다.
L. 크리스마스 전구
출제자 : 허재석
최초 정답 팀 :
L. 크리스마스 전구
L. 크리스마스 전구
Space Complexity – 𝜃 min 𝑁,𝑀
Time Complexity –
𝑂 𝑁𝑀 + 2𝑂𝑁
2
𝑀
2+ 22𝑂
𝑁
22𝑀
22+ …
= 𝑂(
𝑖=0
∞𝑁𝑀
2𝑖) = 𝑂 2𝑁𝑀 = 𝑂(𝑁𝑀)
L. 크리스마스 전구
Hirschberg's algorithm