Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

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

5,332 views

Published on

2016 한양대학교 프로그래밍 경시대회 beginner 및 advanced 문제 풀이 입니다.

Published in: Engineering
  • Be the first to comment

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

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

×