80
제 3회 한양대학교 프로그래밍 경시대회 문제 해설 및 풀이

[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

Embed Size (px)

Citation preview

Page 1: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

제 3회 한양대학교프로그래밍 경시대회

문제 해설 및 풀이

Page 2: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

Beginner Division

Page 3: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. We Are In Hanyang University

출제자 : 권기택

최초 정답 팀 : Lucky

Page 4: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. We Are In Hanyang University

“HANYANG”

출력

Page 5: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

D. 데이트하기 좋은 날씨

출제자 : 이현지

최초 정답 팀 : worldbestbeautymisspyun

Page 6: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

D. 데이트하기 좋은 날씨

7개의 숫자를 비교하여

숫자가 가장 작은 요일에

해당하는 문자열 출력

Page 7: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

A. 불량품 걸러내기

출제자 : 이경준

최초 정답 팀 : jonjalkyungho

Page 8: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

A. 불량품 걸러내기

Hanyang

anyangH

nyangHa

yangHan 7개이외의 로고 인덱스 값

angHany 을출력

ngHanya

gHanyan

Page 9: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

J. 테러를 막아라

출제자 : 이윤성

최초 정답 팀 : Lucky

Page 10: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

J. 테러를 막아라

간단한 경우의 수 문제입니다.

Ai * Bi 들의 합을 출력하면 됩니다.

Page 11: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

B. 최고의 치료사

출제자 : 서병기

최초 정답 팀 : LPL

Page 12: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

B. 최고의 치료사

(0,0) 부터 (N,N)까지

이중 for문으로 탐색하면서

제일 좋은 위치를 찾아낸다

Page 13: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. K번째 큰 수 찾기

출제자 : 최기원

최초 정답 팀 : MyDrillDiggingTheSky

Page 14: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. K번째 큰 수 찾기

수열을 큰 순서대로 정렬한 뒤, K번째 숫자를출력하면 됩니다.

정렬 과정에서

삽입정렬, 버블 소트 등을 이용하면 O(N^2)의시간복잡도로 해결가능하고

머지 소트, 힙 소트 등을 이용하면 O(NlogN)의훨씬 빠른 시간 복잡도로 해결할 수 있습니다.

이 외에도 다양하게 해결할 수 있습니다.

Page 15: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

E. 결혼식

출제자 : 오현석

최초 정답 팀 : MyDrillDiggingTheSky

Page 16: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

E. 결혼식

입력 N과 K의 값이 매우 작기 때문에

배열이나 리스트 자료구조를 사용해

해당 과정을 그대로 구현하면 됨.

Page 17: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

C. 전설의 포켓몬

출제자 : 이현지

최초 정답 팀 : ???

Page 18: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

C. 전설의 포켓몬

𝑥𝑑 와 𝑦𝑑의 값은 서로에게 영향을 미치지 않으므로𝑥𝑑 에 대한 기댓값 + 𝑦𝑑에 대한 기댓값 = 기댓값

기댓값은 적분을 통해서 구할 수 있음

0)𝑚3𝑥𝑑

2) / 𝑚 0) +𝑛6𝑦𝑑

2 ) / 𝑛

Page 19: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

C. 전설의 포켓몬

계산하면 항상 정수

각각의 a, b에 대해

적분값을 구해 최솟값 출력

0)𝑚3𝑥𝑑

2) / 𝑚 0) +𝑛6𝑦𝑑

2 ) / 𝑛

Page 20: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 정 원이와 정원이

출제자 : 이윤성

최초 정답 팀 : ???

Page 21: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 정 원이와 정원이

a, b의 2이상 5이하의 서로 다른 두 수 이므로6가지 경우밖에 나오지 않습니다.

각각 6가지 경우에 대한규칙들을 찾으시면 됩니다.

Page 22: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 정 원이와 정원이

구슬이 N개일 경우누가 이기는 지를 점화식으로 나타내자면,

f(N) = f(N-1) || f(N-a) || f(N-b)

입니다.

Page 23: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 정 원이와 정원이

Jung이라 출력해야할 경우를 J,Won이라 출력해야할 경우를 W라 한다.

i) a=2, b=3 인 경우WWWJ / WWWJ / WWWJ / WWWJ…..

ii) a=3, b=4 인 경우WJWWWWJ / WJWWWWJ….

Page 24: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

Beginner / Advanced

Page 25: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-I / ADV-J. 자석 꽂아넣기

출제자 : 현은률

최초 정답 팀 : MyDrillDiggingTheSky

TrumpEmperorOfWorld

Page 26: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-I / ADV-J. 자석 꽂아넣기

백트래킹 처럼 보인다.

실제 : 시간 초과

Page 27: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-I / ADV-J. 자석 꽂아넣기

N =1일때 부터 시도하면

F(N) = F(N-1) + 2(N/2) 임을 알 수 있다.

(짝수일 때 N, 홀수일 때 N+1)

Page 28: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-H / ADV-H. HY 수열

출제자 : NC소프트

최초 정답 팀 : 2ge ChoiSun UU

Etach Jo

Page 29: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-H / ADV-H. HY 수열

H수열 -> 페리 수열

* 페리 수열의 특징

i번째 항은

i-1번째 항과 i+1번 항을

바보셈한 결과와 같다

Page 30: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

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을 출력

Page 31: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-F / ADV-I. 보고서 검사

출제자 : 정채홍

최초 정답 팀 : MyDrillDiggingTheSky

llllllll

Page 32: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-F / ADV-I. 보고서 검사

각 문자들의 카운팅을 위한 배열을 만들어도 되고, STL map을 사용하여 카운팅 후 iterator로출력해주시면 됩니다.

Page 33: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

제 3회 한양대학교프로그래밍 경시대회

문제 해설 및 풀이

Page 34: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

Beginner / Advanced

Page 35: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-I / ADV-J. 자석 꽂아넣기

출제자 : 현은률

최초 정답 팀 : MyDrillDiggingTheSky

TrumpEmperorOfWorld

Page 36: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-I / ADV-J. 자석 꽂아넣기

백트래킹 처럼 보인다.

실제 : 시간 초과

Page 37: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-I / ADV-J. 자석 꽂아넣기

N =1일때 부터 시도하면

F(N) = F(N-1) + 2(N/2) 임을 알 수 있다.

(짝수일 때 N, 홀수일 때 N+1)

Page 38: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-H / ADV-H. HY 수열

출제자 : NC소프트

최초 정답 팀 : 2ge ChoiSun UU

Etach Jo

Page 39: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-H / ADV-H. HY 수열

H수열 -> 페리 수열

* 페리 수열의 특징

i번째 항은

i-1번째 항과 i+1번 항을

바보셈한 결과와 같다

Page 40: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

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을 출력

Page 41: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-F / ADV-I. 보고서 검사

출제자 : 정채홍

최초 정답 팀 : MyDrillDiggingTheSky

llllllll

Page 42: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

BEG-F / ADV-I. 보고서 검사

각 문자들의 카운팅을 위한 배열을 만들어도 되고, STL map을 사용하여 카운팅 후 iterator로출력해주시면 됩니다.

Page 43: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

Advanced Division

Page 44: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

E. 369CLAP GAME

출제자 : 권기택

최초 정답 팀 : 4 dollar

Page 45: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

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을 비교하고 진법 변환한 값 혹은 박수를 친다.

Page 46: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

C. 디오니소스의 파티

출제자 : 오현석

최초 정답 팀 : Architecture

Page 47: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

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])

Page 48: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

F. 블록 쌓기

출제자 : 윤승원

최초 정답 팀 : MARCH

Page 49: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

F. 블록 쌓기

N <= 10

모든 경우의 수는 최대 10! = 3,628,800

1초에 약 1억번 연산할 수 있기 때문에모든 경우의 수를 재귀함수로 시도해도

시간 안에 답을 구할 수 있다.

Page 50: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

B. 7777

출제자 : 허재석

최초 정답 팀 : MARCH

Page 51: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

B. 7777

1582년 10월 15일부터 경과한 날을 구하는 함수 get_datestamp(date)를 작성

get_datestamp(“특정 날짜“) –get_datestamp(“마지막 연애날짜“) >= 7777

특정 연도가 윤년인지 판단하는 함수도 만드는것이 좋습니다.

Page 52: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 그녀를 찾아서

출제자 : 김정무

최초 정답 팀 : Your team name here

Page 53: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 그녀를 찾아서

간단한 최단거리 문제

거리를 저장하는 dist배열을 만듬

상하좌우로 이동하면서 dist배열 갱신

Page 54: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 그녀를 찾아서

- 주의점 – 얘가 왼쪽에서온건 알겠는데…방향전환을 한

걸까??

Page 55: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 그녀를 찾아서

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

난 위에서 온최단거리야

난 왼쪽에서 온최단거리야

Page 56: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 그녀를 찾아서

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

얘는 같은방향에서 왔으니

방향전환을 안했군!!

Page 57: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

G. 그녀를 찾아서

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

좌 우

얘는 다른방향에서왔으니

방향전환을 했군!!

Page 58: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

A. 무빙워크 설치할 돈도 없으면 네 실력을 탓해

출제자 : 김종현

최초 정답 팀 : Your team name here

Page 59: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

A. 무빙워크 설치할 돈도 없으면 네 실력을 탓해

해설 :모든 건물이 서로 연결되어 있어야 한다최소 스패닝 트리(크루스칼 알고리즘)

무빙워크를 간선으로 생각할 때 금으로 만드는 경우 비용0, 은이면 1, 동이면 10000으로 잡으면 된다.

금으로 만드는 경우 비용이 없기 때문에 항상 은, 동으로 만드는 경우보다 우선적으로 작용한다.

N<10000이므로 항상 은이 동으로 만드는 경우 보다 우선적으로 작용한다.

->크루스칼 알고리즘이 기본적으로 그리디 알고리즘임을 이용함

Page 60: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

A. 무빙워크 설치할 돈도 없으면 네 실력을 탓해

전체 비용 : cost

Cost % 10000 silver

(Cost –silver)/10000 bronze

N-1-silver-bronze gold

스패닝 트리 완성이 불가능 할 경우 -1

Page 61: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

D. 약물 회수하기

출제자 : 김종현

최초 정답 팀 : ???

Page 62: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

D. 약물 회수하기

해설 :

BFS를 통해 약물이 있는 모든 마을 간의 거리를전처리 한다. O(그리드의 크리 *n)

약물의 등급에 따라 각 마을을 정렬한다

O(nlogn)

Page 63: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

D. 약물 회수하기

해설 :

DP[현재 위치][앞으로 담을 수 있는 개수][연속]

=> 필요한 최소한의 이동거리

연속으로 담은 횟수가 2 ->다음 위치의 약물등급은현재 위치의 약물보다 등급이 2이상 커야 한다.

아니라면 다음 위치의 약물은 현재 위치의 약물 등급보다 크기만 하면 된다.

Page 64: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

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인 경우 ->회수를 중단하고 처음위치로 돌아가도록

Page 65: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

D. 약물 회수하기

해설 :

DP[현재 위치][앞으로 담을 수 있는 개수][연속]

담을 수 있는 개수를 이분탐색을 통해 재귀적으로 다이나믹 프로그래밍을 진행 ->O(n^3 * logn)

단순히 담을 수 있는 개수를 하나씩 줄이면서 진행

->O(n^4)

O(n^4)의 최적화되지 않은 코드까지 통과되도록 허용

Page 66: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. 비숍 배치하기

출제자 : 김정무

최초 정답 팀 : ???

Page 67: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. 비숍 배치하기

이분매칭 문제

Page 68: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. 비숍 배치하기

한대각선 안에는하나의 비숍만놓을 수 있음

Page 69: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. 비숍 배치하기

Page 70: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. 비숍 배치하기

오른쪽으로 내려오는 대각선과왼쪽으로 내려오는대각선 매칭!!

Page 71: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. 비숍 배치하기

장애물이 있는경우

Page 72: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. 비숍 배치하기

룩이 있는 경우파란 부분에는 놓을 수 없다.

Page 73: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

K. 비숍 배치하기

파란색 부분에서 만나는대각선은 매칭을 시켜주지 않는다.

Page 74: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. 크리스마스 전구

출제자 : 허재석

최초 정답 팀 : ???

Page 75: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. 크리스마스 전구

일반적으로 time & space complexity O(NM)에 구할 수 있다.

이 문제는 space complexity를 O(min(N, M))으로 줄이는 것이 목표이다.

Page 76: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. 크리스마스 전구

두 문자열을 A, B라 할 때

B를 중간 지점에서 나눈 B_left와 B_right를 생각하자.

B_left에 해당하는 LCS를 만들어내는 A의 왼쪽 부분과B_right에 해당하는 LCS를 만들어내는 오른쪽 부분이있다.

물론, 그 A의 왼쪽 부분과 오른쪽 부분은 B를 나눈 경우와 다르게 정확히 절반씩 나누어지지 않을 수 있다.

Page 77: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. 크리스마스 전구

출제자 : 허재석

최초 정답 팀 :

Page 78: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. 크리스마스 전구

Page 79: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. 크리스마스 전구

Space Complexity – 𝜃 min 𝑁,𝑀

Time Complexity –

𝑂 𝑁𝑀 + 2𝑂𝑁

2

𝑀

2+ 22𝑂

𝑁

22𝑀

22+ …

= 𝑂(

𝑖=0

∞𝑁𝑀

2𝑖) = 𝑂 2𝑁𝑀 = 𝑂(𝑁𝑀)

Page 80: [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이

L. 크리스마스 전구

Hirschberg's algorithm