SlideShare une entreprise Scribd logo
1  sur  41
Télécharger pour lire hors ligne
제 3 회
한양대학교 프로그래밍 경시대회
-Beginner Division-
2016. 11. 12
주최 및 후원
한양대학교 컴퓨터공학부
한양대학교 ACM-ICPC 대표팀
한양대학교 컴퓨터공학부 특성화사업단
한양대학교 컴퓨터공학부 어코드사업단
NAVER D2
NCSOFT
삼성 소프트웨어 멤버십
대회 유의사항
1. 대회 진행시간은 3 시간 입니다.
2. 해결한 문제 수, 푸는데 사용한
시간에 따른 페널티로 순위를
결정합니다.
3. 대회 종료 후, 결과 발표 및 시상이
있을 예정입니다.
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 2 / 20
A. 불량품 걸러내기
시간제한 1초
한양대학교 학생인 경준이는 이번 학기에 장학금을 받지 못해 알바로 돈을 벌기로 했다. 경준이
가 시작한 알바는 아래의 그림과 같이 “Hanyang” 로고가 들어가 있는 뱃지들 중에 불량품을 걸
러내는 작업이다. 로고는 반시계 방향으로 읽는다. 아래의 로고는 H부터 시작해서 Hanyang으로
읽을 수도 있지만, y부터 시작해서 yangHan으로 읽을 수도 있다.
Hanyang yangHan
입력
첫째 줄에 “Hanyang” 로고의 글자가 주어진다.
둘째 줄에 작업해야 할 총 뱃지들의 개수 N이 주어진다. (1 ≤ N ≤ 100)
다음 N개의 줄에 1번부터 차례대로 번호가 붙고, 7글자의 알파벳 수열이 주어진다.
대소문자를 구별하고, 소문자와 대문자 이외의 글자가 들어가는 경우는 없다.
출력
불량품의 번호를 한 줄씩 출력한다. 불량품이 없을 경우 0을 출력한다.
예제 입력 예제 출력
Hanyang
5
Hanyang
yangHan
hanyang
angahny
gnaynaH
3
4
5
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 3 / 20
B. 최고의 치료사
시간제한 1초
세계 평화를 지키기 위해 영웅들로 구성된 다국적 특수 부대, 오버워치가 결성되었다. 오버워치
의 영웅들은 오늘도 악당들과 맞서 싸운다. 오버워치의 치료사 루시우는 음악을 통해 주변의 다
친 영웅들을 치료할 수 있다. 루시우를 도와 다친 영웅들의 위치가 주어졌을 때 루시우가 최대로
많이 치료할 수 있는 위치 좌표를 출력하시오.
치료 범위는 단위길이 a X a 크기의 정사각형 형태이다. 편의를 위해 영웅은 격자 위에 있는
점이라고 가정한다.
그림의 진한 정사각형은 치료범위이다. 루시우의 위치는 (2.5, 3.5)이고 세 영웅의 위치가
(1,5), (1,0), (4,4)이고 치료 범위가 3일 때의 상황이다. 이 경우 최대 2명의 영웅을 치료할
수 있다.
입력
첫 번째 줄에 다친 영웅의 수 N(1 ≤ N ≤ 100)과 범위 a (1 ≤ a ≤ 100)가 주어진다.
그 다음 줄부터 각 영웅의 위치가 한 줄씩 주어진다. 위치는 X Y 순서의 숫자로 주어진다.
(0 ≤ X, Y ≤ 100)
출력
영웅을 최대한 치유할 수 있는 루시우의 위치를 출력한다.
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 4 / 20
예제 입력 예제 출력
3 3
1 5
1 0
4 4
2.5
3.5
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 5 / 20
C. 전설의 포켓몬
시간제한 1초
수영이, 정원이, 석기, 지훈이는 Pokemon GO에 푹 빠져 포켓몬 마스터를 꿈꾸고 있다. 그러던
중 수영이와 친구들은 속초에서 전설의 포켓몬 뮤츠가 나타난다는 엄청난 정보를 듣고 당장 속초
로 출발하기로 한다. 사람들은 뮤츠가 속초 어디서든 나타날 수 있다고 했지만 수영이와 친구들
은 뮤츠가 반드시 특정 구역 내에서만 나타난다는 사실을 밝혀냈다. 특정 구역은 다음과 같이 너
비가 M, 높이가 N인 직사각형 모양을 하고 있다.
.
속초에 도착한 수영이와 친구들은 뮤츠가 나타날 때까지 어디에서 기다릴지 정하기로 했다. 하지
만 각자 원하는 위치가 모두 달랐고 각자 자신이 정한 위치가 가장 좋다고 우겼기 때문에 한 곳
으로 정할 수가 없었다. 수영이와 친구들은 결국 네 장소 중 뮤츠를 잡는 데에 드는 비용의 기댓
값이 가장 작은 곳에 가기로 결정하게 되었다. 수영이와 친구들을 위해 가장 기댓값이 작은 곳이
어디인지 알려주자.
수영이와 친구들이 선택한 장소는 XY좌표로 나타낸다. XY좌표는 특정 구역 내에서의 위치를 말
한다. 특정구역의 가장 왼쪽 아래의 위치는 (0, 0)으로 나타낼 수 있고 가장 오른쪽 위의 위치
는 (M, N)로 나타낼 수 있다.
뮤츠가 등장한 장소를 (a, b)라고 할 때 어떤 장소 (x, y)에서 (a, b)로 이동하는 데에 드는
비용은 S는 다음과 같이 정의된다.
M
N
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 6 / 20
𝑥 𝑑 = 𝑎 − 𝑥
𝑦 𝑑 = b − y
S = 3𝑥 𝑑
2
+ 6𝑦 𝑑
2
특정 구역 내의 모든 위치는 뮤츠가 등장할 확률이 P 로 같으며 모든 확률 값의 합은 1 이다.
다음은 위키백과에 정의된 기댓값의 정의이다.
입력
첫째 줄에 특정 구역의 너비 M, 특정 구역의 높이 N이 주어진다. (4 ≤ M, N ≤ 100)
다음 4줄에는 수영이와 친구들이 각자 원하는 위치의 x, y의 값이 한 줄마다 주어진다.
(0 ≤ x ≤ M, 0 ≤ y ≤ N)
M, N, x, y는 정수로 주어진다. (뮤츠가 등장하는 위치의 좌표는 정수가 아닐 수도 있다.)
출력
가장 기댓값이 작은 위치의 기댓값을 소수점 첫째 자리에서 반올림하여 출력한다.
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 7 / 20
예제 입력 예제 출력
4 5
1 2
3 0
0 1
2 5
21
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 8 / 20
D. 데이트 하기 좋은 날씨
시간제한 1초
정무는 모태솔로 탈출을 위해 소개팅을 하기로 하였다. 처음으로 하는 소개팅에 신이 난 정무는
데이트 코스를 열심히 짜고 있었다. 데이트하기 좋은 장소와 주변의 맛집을 찾아보고 데이트하는
날에 입을 옷까지 정한 정무는 소개팅을 할 날짜를 정하지 않았다는 사실을 깨달았다.
어느 날이 좋을지 고민하던 정무를 날씨를 보고 정하기로 하였다. 다음주 중 가장 강수 확률이
낮은 요일이 언제일지 알려주자.
입력
첫째 줄에 월요일부터 일요일까지의 강수 확률이 순서대로 7개의 숫자로 주어진다.
각 숫자는 0 이상 100이하의 정수이다. 각 요일의 강수확률은 모두 다르다.
출력
각 테스트 케이스에 대해 한 줄에 하나씩 N에 대한 M을 출력한다.
예제 입력 예제 출력
10 25 30 40 55 18 5 SUN
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 9 / 20
E. 결혼식
시간제한 1초
오늘도 열심히 나라를 지키고 있는 모 지역의 한 부대에 복무중인 안 모 소대장이 마침내 결혼식
을 올리게 되었다. 이로 인해 최소 인원을 남긴 전 부대원이 포상 외출을 나가 결혼식에 참여하
게 되었지만 결혼식에 참여하면 일손을 돕고, 축가나 기타 허드렛일 등을 수행하는 잡일 담당이
될 수 있다는 끔찍한 소식을 듣게 되었다. 그리하여 머리를 맞댄 부대원들은 한가지 꾀를 내게
되었는데 이 꾀인즉, 부대원들의 수가 많기 때문에 1명정도는 없더라도 티가 안 날 것이라는 것
이었다. 그래서 부대원들은 한 명의 불참러를 뽑아 말그대로 자유롭게 포상 외출을 즐기고 오도
록 궁극의 복불복을 하게 되었다. 이 행복한 불참러를 선발하는 과정은 다음과 같다.
1. 시작은 가장 계급이 높은 왕고부터 시작하며, 자신부터 시계방향으로 K 번째의 사람을
찾는다.
2. K 번째 사람은 결혼식장에 들어가고 다음 사람부터 다시 시계방향으로 K 번째 사람을 찾
는다.
3. 2 번 과정을 1 명이 남을 때까지 반복한다.
이 과정을 빠르게 이해한 프로불참러 조세호 일병은 이 결혼식을 불참하려면 정확히 자신이 왕고
로부터 시계방향으로 P번째에 위치해야 한다는 것을 알아냈다.
예를 들어 7명의 부대원들이 K를 3으로 정하여 불참러를 정하는 과정을 나타내면 다음과 같다.
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 10 / 20
위의 그림을 보면 왕고로부터 시계방향으로 3번째 위치에 존재하는 C의 자리가 불참러의 위치이
고 P의 값은 3이 된다.
조세호 일병이 자신의 소신을 지킬 수 있도록 외출한 부대원의 수 N과 불참러를 뽑는 기준 K가
입력으로 주어질 때 P의 값을 출력하는 프로그램을 만들어 주자.
입력
첫째 줄에 외출한 부대원의 수 N과 불참러를 선발하는 기준 값인 K가 주어진다.
(1 ≤ N, K ≤ 100)
출력
해당 케이스에서 조세호 일병이 결혼식을 불참할 수 있는 위치값 P를 출력한다. 만약 왕고의 위
치가 불참할 수 있는 위치라면 자신은 왕고가 아니기 때문에 “Pro-attendee”이라고 출력한다.
이 때 대소문자를 구분함을 주의한다.
예제 입력 예제 출력
7 3 3
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 11 / 20
F. 보고서 검사
시간제한 1초
이번에 새로 들어온 조교가 수업을 맡게 되었다. 수업을 맡은 이 조교는 학생들에게 과제를 내주
었는데, 과제를 베끼는 학생들이 있어서 과제를 엄격하게 검사하기로 했다. 조교가 보고서를 검
사하는 과정은 다음과 같다.
1. 학생들에게 받은 보고서가 양식에 잘 맞는지 확인한다. (글자수 검사 등)
2. 학생들에게 받은 보고서를 모두 보면서 대필 검사와 표절 검사를 한다.
3. 대필 검사와 표절 검사에 걸린 보고서를 제외한 나머지 보고서를 확인하여 주제에 맞게
썼는지 확인한다.
4. 주제에 맞게 잘 썼는지 검사하고, 조교의 판단 하에 적절한지를 점수로 메긴다.
조교는 위와 같은 검사를 하던 중, 표절 검사를 대신 수행시켜주는 프로그램이 필요하다고 생각
하였다. 하지만 표절 검사기를 만드는 것이 매우 어렵기 때문에 간단한 표절검사기를 만들기로
하였다. 만들 표절 검사기는 다음과 같은 기능을 수행한다.
1. 각 보고서 내용에 포함되는 문자들이 몇 번 출현하였는지 센다.
2. 각 보고서에 출현된 문자들의 개수가 같으면 같은 보고서라고 판단하고, 아니면 표절하
지 않은 보고서라고 판단한다.
조교를 위해 우리가 해야할 일은 간단한 표절 검사기를 만들기 위해 각 보고서 내용에 포함되는
문자들이 몇 번 출현하였는지 숫자를 세는 프로그램을 작성해야 한다.
입력
첫 줄에 테스트케이스의 개수 T가 주어진다.
각 테스트케이스의 첫째 줄에는 보고서 내용의 길이 N (1 ≤ N ≤ 100,000)이 주어진다.
그 다음줄에는 보고서의 내용이 주어진다. 단, 보고서의 내용은 영소문자(a-z), 영대문자(A-Z),
숫자(0-9)로만 이루어져 있다.
출력
각 테스트케이스에 대하여 각각의 라인에 어떤 문자들이 몇 번 출현하였는지 개수를 공백으로 구
분하여 출력한다. 단, 하나도 출현이 되지 않은 문자들은 제외하며, 각 문자들을 사전순으로 출
력한다.
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 12 / 20
예제 입력 예제 출력
2
6
aaabbb
11
10AAbbBC123
a 3
b 3
0 1
1 2
2 1
3 1
A 2
B 1
C 1
b 2
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 13 / 20
G. 정 원이와 정원이
시간제한 1초
성은 정 이고, 이름은 원이인 정원이는 컴퓨터공학부의 멋진 복학생이다. 헌데, 이번에 새로 들
어온 새내기 중 이정원이라는 친구(성은 이, 이름은 정원)가 들어왔다. 둘다 정원이라고 표기하
면 헷갈릴 수 있으니 이글에서는 이제부턴 정 원이는 원이씨로, 이 정원은 정원씨로 표기하겠다.
정원씨가 들어온 후, 원이씨는 주변에서 평소 자기에게 깍듯하게 대하던 후배들이 ‘정원이 이놈
어딨냐?’, ‘정원이 좀 멍청하지 않냐?’ 등의 말을 하는 것을 듣고 묘하게 기분이 나빴다. 사람
들이 ‘정원이’하고 부를 때마다 헷갈리는 것은 정원씨도 마찬가지였다.
그래서 둘은 개명을 걸고, 내기를 하기로 했다. 내기 종목은 구슬 게임이다. 구슬 게임의 법칙
은 다음과 같다.
탁자 위에 구슬 N개가 있다. 두 사람이 턴을 번갈아 가면서 구슬을 가져가며, 구슬은 1개, a개,
b (1 < a < b ≤ 5)개 만큼 가져갈 수 있다. 마지막 구슬을 가져가는 사람이 게임을 이기게 된
다. a, b는 1초과 5이하 수에서 서로 다른 두개가 무작위로 주어진다. 두 명 다 완벽하게 게임
을 한다. 게임은 원이씨가 먼저 시작한다. a, b가 주어졌을 때 원이씨가 이길 확률(구슬의 개수
가 모든 자연수 범위에서 무작위로 하나 주어진다고 생각했을 때, 원이씨가 이길 확률)을 구하
고, 그 뒤 구슬의 개수 N이 주어졌을 때 누가 이기는지 구하는 프로그램을 작성 하시오.
입력
첫째 줄에 두 정수 a, b가 주어진다.
둘째 줄에는 구슬의 개수 N이 주어진다. (1 ≤ N ≤ 1,000,000,000,000)
출력
첫째 줄에는 원이씨가 이길 확률을 기약분수의 형태로 나타내어 출력한다.
둘째 줄에는 N이 주어졌을 때 이기는 사람을 출력한다. 원이씨가 이길 경우는 ‘Won’을 정원씨가
이길 경우는 ‘Jung’을 출력한다.
예제 입력 예제 출력
2 4
4
2/3
Won
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 14 / 20
H. HY수열
시간제한 1초
입사 한 지 얼마 안 된 주람이는 팀의 막내로 HY수열에 관한 일을 하고 있다. HY수열은 H수열과
Y수열로 나뉘며 i번째 H수열은 다음과 같이 정의 된다. (3 ≤ i)
1. i이하의 자연수로 만들 수 있는 분수 중 값이 1이하인 분수를 모두 구한다.
2. 분수들 중 기약분수만을 남기고 지운다.
3. 분수들을 오름차순으로 정렬한다.
위와 같은 방법으로 수열을 구하면 3번째 H수열은 {1/3, 1/2, 2/3, 1/1} 이다.
이 때 i번째 Y수열은 i번째 H수열을 바보셈으로 계산하여 구할 수 있다. 바보셈이란 분수 계산
에 사용되는 셈이다. 바보셈은 ∎로 나타내며 다음과 같이 정의된다.
𝑏
𝑎
∎
𝑑
𝑐
=
𝑏 + 𝑑
𝑎 + 𝑐
i번째 H수열의 크기가 k라고 할 때 i번째 Y수열의 j번째 항은 다음과 같다.
𝑌𝑖,𝑗 = 𝐻𝑖,𝑗∎ 𝐻𝑖,𝑗+2 ( j ≤ k − 2 )
(𝐻𝑖,𝑗는 i번째 H수열의 j번째 항이고 𝑌𝑖,𝑗는 i번째 Y수열의 j번째 항이다.)
오늘 주람이가 해야 할 일은 𝐹𝑖의 값을 구하는 것이다.
𝐹𝑖 = ∑ 𝐻𝑖,𝑗
𝑘
𝑗=1
− ∑ 𝑌𝑖,𝑗
𝑘 − 2
𝑗=1
일을 열심히 하던 주람이는 이대로 하다간 제시간에 퇴근할 수 없다는 생각이 들었다. 일을 빨리
처리할 수 있도록 𝐹𝑖값을 구하는 프로그램을 만들어주자.
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 15 / 20
입력
첫째 줄에 i(3 ≤ I ≤1,000,000,000)의 값이 주어진다.
출력
𝐹𝑖를 기약분수로 나타냈을 때 p/q가 된다. 이 때 p, q를 한 줄에 공백으로 구분하여 출력한다.
예제 입력 예제 출력
3 4 3
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 16 / 20
I. 자석 꽂아넣기
시간제한 1초
얼마 전에 나온 문명 VI를 하던 하진이는 보드게임에 흥미를 가지게 되었다. 그중 하나는 하노
이의 탑으로, 기둥이 겨우 세 개 밖에 없어 세상이 망하는 날이 오래 간다는 사실을 깨달은 그는
기둥의 개수를 늘려보고자 했다. 하지만 기둥의 개수를 늘려본 결과 너무나도 쉽게 세상이 멸망
한다는 것을 알았고, 금세 흥미를 잃게 되었다.
얼마 후 다른 조건을 걸어 보기로 한 하진이는 새로운 보드게임을 만들어냈다. 두 공에 적힌 번
호의 합이 완전 제곱수면 인력이 작용해 자석처럼 붙게 되고 그 외에는 엄청난 척력이 작용하여
같이 끼우지 못하게 되는 것이다.
공을 한 번에 하나씩, 번호가 커지는 순서로 기둥에 끼우는 게임을 한다. 즉 1번을 끼우고 나서
2번을 끼우고, 그리고 나서 3번을 끼우고 하는 식으로 공을 기둥에 끼우며, 더 이상 밀어내지
않도록 공을 끼울 수 없게 되면 게임이 끝났다. 게임의 목표는 최대한 많은 개수의 공을 끼우는
것이다. 위에 있는 그림에는 기둥이 네 개인 경우에 최대한 많은 공을 끼운 결과가 나와있다.
여러분은 하진이와 준근이가 하는 이 게임을 준근이를 도와 같이 하게 되었다. 공을 서로 번갈아
가며 끼운다고 할 때, 먼저 시작하는 쪽이 유리한지 불리한지 알게 하기 위해 몇 개까지 끼울 수
있는지 알려 달라는 준근이를 도와 게임에서 이기게 해 주자.
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 17 / 20
입력
첫째 줄에 쓸 수 있는 기둥의 개수를 나타내는 정수 N(1 ≤ N ≤ 63)이 입력된다.
출력
기둥에 끼울 수 있는 공의 최대 개수를 나타내는 정수를 출력한다. 끼울 수 있는 공의 개수가 무
한하면 -1을 출력한다.
예제 입력 예제 출력
4 11
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 18 / 20
J. 테러를 막아라
시간제한 1초
ALOHA 시의 슈퍼 히어로 윤성은 2일 뒤에 테러리스트들이 시청을 공격할 것이라는 사실을 알게
되었다. 윤성은 첩보를 통해 테러리스트들이 두 개의 도로를 점거해 나가며 시청으로 향할 것을
알았다. 윤성은 테러리스트들이 어느 지점부터 점거를 시작해 나갈 것인지는 알지만 어떤 도로들
을 이용할 것인지는 알지 못한다. 따라서 점거시작 지점부터 시청이 있는 지점까지 두 도로만에
가는 모든 경우의 수에 대해 각각의 대비책을 세우려 한다.
ALOHA 시의 시청 주변 지점들은 점거 시작 지점과 시청 지점을 포함해 5개이며 점거 시작 지점
은 1번, 시청 지점은 5번으로 나타낸다. 이 때 윤성이는 도시의 모든 도로상황을 알 필요가 없
다는 것을 알게 되었다. 윤성이는 1번 지점을 시작점으로 갖는 도로들의 정보와 5번 지점을 도
착점으로 갖는 도로들의 정보만 있으면 된다는 것을 알았다. 1번 지점을 시작점으로 갖는 도로들
의 정보와 5번 지점을 도착점으로 갖는 도로들의 정보가 주어졌을 때 윤성이가 세워야 할 대비책
의 개수를 구해보자. (도로는 일방통행인 것들도 있어서 1지점에서 2지점으로 향하는 도로가 있
어도 2지점에서 1지점으로 향하는 도로가 없을 수 있다.)
입력
첫째 줄에는 1번 지점을 시작점으로 갖는 도로의 정보를 나타내는 다섯 개의 정수 A1, A2, … A5
가 주어진다. Ai는 1번 지점을 출발점으로 갖고 i번 지점을 도착점으로 갖는 도로의 가지 수를
의미한다.
둘째 줄에는 5번 지점을 도착점으로 갖는 도로의 정보를 나타내는 다섯 개의 정수 B1, B2, … B5
가 주어진다. Bi는 i번 지점을 출발점으로 갖고 5번 지점을 도착점으로 갖는 도로의 가지 수를
의미한다.
모든 도로의 가지수는 0이상 100 이하의 정수이다.
출력
슈퍼 히어로 윤성이 세워야 하는 대비책의 수를 출력한다.
예제입력 예제출력
0 0 1 0 0
0 0 8 0 0
8
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 19 / 20
K. We are in the Hanyang University!!!!!
시간제한 1초
우리는 지금 대한민국 명문 ○○대학교에서 HCPC를 치르고 있다. 세계로 뻗어 나가는 ○○대학교를
위해 ○○을 영어로 표기하려고 한다. ○○을 표기법에 맞추어 영어로 출력하여라.
입력
없다.
출력
공백없이 대문자로 출력한다.
2016 한양대학교 프로그래밍 경시대회(Beginner Division)
페이지 20 / 20
L. K 번째로 큰 수 찾기
시간제한 1초
배열의 크기 N과 정수 K, 배열 A가 입력으로 주어질 때, 배열에서 K번째로 큰 숫자를 구하여 그
값을 출력 하시오.
(단, 1 ≤ K ≤ N ≤ 1000 이고, A에는 중복 되는 원소가 없는 것이 보장된다.).
입력
첫번째 줄에 배열의 크기 N과 정수 K가 주어진다.
두번째 줄에는 배열 A의 원소를 나타내는 A[i]가 N개 주어진다. 이 값은 모두 다르다.
(단, -1,000,000 ≤ A[i] ≤ 1,000,000)
출력
배열 A에서 K번째로 큰 숫자를 출력하시오
예제 입력 예제 출력
8 2
1 3 4 2 7 5 6 8
7
제 3 회
한양대학교 프로그래밍 경시대회
-Advanced Division-
2016. 11. 12
주최 및 후원
한양대학교 컴퓨터공학부
한양대학교 ACM-ICPC 대표팀
한양대학교 컴퓨터공학부 특성화사업단
한양대학교 컴퓨터공학부 어코드사업단
NAVER D2
NCSOFT
삼성 소프트웨어 멤버십
대회 유의사항
1. 대회 진행시간은 3 시간 입니다.
2. 해결한 문제 수, 푸는데 사용한
시간에 따른 페널티로 순위를
결정합니다.
3. 대회 종료 후, 결과 발표 및 시상이
있을 예정입니다.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 2 / 21
A. 무빙워크 설치할 돈도 없으면 네 실력을 탓해
시간제한 1초
비선실세 윤성이는 평범한 대학생이었던 종현이에게 한양대학교 건물들 사이에 무빙워크를 설치
하여 모든 건물들이 무빙워크로 서로 연결되도록 계획을 짜도록 지시했다. 이때 윤성이는 다음과
같은 조건을 만족하도록 요구사항을 전달했다.
1. 건물 사이에 무빙워크를 설치하여 학교 내의 모든 건물이 서로 연결되도록 하되 설치하는
무빙워크 전체의 개수는 최소가 되어야 한다.
2. 1을 만족하는 경우 중 금으로 만든 무빙워크의 개수를 최대한 늘려야 한다.
3. 2를 만족하는 경우 중 은으로 만든 무빙워크의 개수를 최대한 늘려야 한다.
무빙워크는 기본적으로 양방향 모두 동작하도록 설계된다. 건물들 간에는 무빙워크를 설치할 수
있는 경우도 있고 없는 경우도 있으며 지형에 따라 사용할 수 있는 재료도 정해져 있다고 한다.
그와 관련하여 윤성이는 자료를 종현이에게 넘겨주었으나 종현이는 경시대회 문제를 만드느라 피
곤하므로 여러분이 이를 해결해야 한다.
입력
첫 줄에 한양대학교 내의 건물 개수 n, 설치할 수 있는 무빙워크의 개수 m이 주어진다.
(3 ≤ n ≤ 500, 1 ≤ m ≤ 5,000). 그 다음 m개의 줄에 순서대로 a, b, c가 주어지는데 건물 a,
b번 사이에 무빙워크를 설치할 수 있다는 뜻이다. a, b는 1이상 n이하이고 서로 같지 않으며 c
는 0일때는 금, 1일때는 은, 2일때는 동으로 만들어야 한다는 뜻이다. a, b, c 묶음은 동일한
값으로 여러번 주어질 수도 있다.
출력
조건1, 2, 3을 모두 만족하며 무빙워크를 설치할 때 금, 은, 동으로 만들 무빙워크의 개수를 각
각 공백으로 구분하여 출력한다. 만약 목록에 있는 무빙워크를 모두 설치해도 n개의 모든 건물들
이 서로 연결되도록 할 수 없다면 -1을 출력한다.
예제 입력 예제 출력
3 4
1 2 0
1 2 2
2 3 1
1 3 2
1 1 0
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 3 / 21
B. 7777
시간제한 1초
한양대학교 알고리즘 연구 동아리 ALOHA에는 솔로가 된지 7777일이 되면 마법을 부릴 수 있다
는 전설이 내려져 온다. 재석이는 동아리에 그런 조건을 만족하는 사람들을 조사해 전설을 검증
해보기로 했다. 동아리 회원들의 이름과 마지막 연애 날짜가 주어지면 “특정 날짜”에 솔로가 된지
7777일 이상 경과한 동아리 회원의 이름을 입력 순서대로 출력한다. 단, 마지막 연애 날짜와 “특
정 날짜”가 같은 경우에는 0일이 경과한 것으로 간주한다.
입력
첫 줄에 동아리 회원의 수 N (1 ≤ N ≤1,000)이 주어진다.
두번째 줄에 “특정 날짜”가 yyyy-mm-dd 형식으로 주어진다.
세번째 줄부터 (N+2)째 줄에 걸쳐 각 줄에 공백없이 알파벳으로 구성된 10글자 이하의 동아리원
이름과, 마지막 연애 날짜가 yyyy-mm-dd 포맷으로 공백으로 구분되어 주어진다.
모든 입력은 그레고리력을 사용한 이후인 1582-10-15이후인 날짜 중 3000-12-31 이전의 날짜들
로 구성된다. 또한 “특정 날짜”보다 뒤에 오는 날짜로 마지막 연애 날짜가 주어지지는 않는다.
대부분의 날짜 관련 내장 라이브러리는 1900년 이전의 날짜를 지원하지 않는다는 사실에 유의하
라.
출력
특정 날짜에 솔로가 된지 7777일 이상 경과한 사람의 이름을 입력 순서대로 출력한다. 한 줄에
한 명의 이름만 출력하며, 이름과 이름은 엔터로 구분하시오.
단, 출력할 이름이 하나도 없는 경우에는 “Not Found”를 출력한다. (큰따옴표 제외)
예제 입력 예제 출력
4
2016-11-12
JM 1995-09-27
WE 1994-12-10
KT 2016-11-12
Ammonites 1582-10-15
WE
Ammonites
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 4 / 21
HINT
JM는 7717일, WE는 8008일, KT는 0일 경과하였다.
- 윤년에 관한 규칙
서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다.
이 중에서 100으로 나누어 떨어지는 해는 평년으로 한다.
그 중에 400으로 나누어 떨어지는 해는 윤년으로 둔다.
- 각 달의 일수
1월부터 12월까지 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31일,
윤년인 해의 2월은 29일 이다.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 5 / 21
C. 디오니소스의 파티
시간제한 1초
옛날옛적, 신들이 살고 있는 올림푸스에서 술의 신 디오니소스가 성대한 파티를 열었다. 많은 신
들과 영웅들이 그의 파티에 초대되었고, 올림푸스는 그 파티 준비와 기대감으로 한창 부풀어 있
었다.
파티 당일 아침, 초대된 영웅 중 한명인 오르페우스도 기대감에 한껏 들떠 밤을 지새다 자신이
늦잠을 자버렸다는 사실을 깨닫게 되었다. 서둘러 디오니소스의 파티장으로 나섰지만 이미 시간
이 촉박한 상황이므로 오르페우스는 느린 평소 걸음 대신 노래를 부르며 반주에 맞춰 빠르게 걷
기로 결정했다. 현재 파티 시작까지 남은 시간은 T분이고 자신의 집에서 디오니소스의 파티장까
지는 L만큼의 거리가 있다.
오르페우스는 N개의 노래를 연주할 수 있고, 각 노래의 소요 시간은 1분으로 같다. 하지만 템포
가 다르기 때문에 각 노래를 연주하면서 걸을 수 있는 거리는 서로 다르다. 오르페우스는 남은 L
거리를 노래를 연주하면서 빠르게 이동해야 한다. 다만 하나의 노래가 종료되기 전에 파티장에
도착할 경우 파티장의 노래와 겹쳐 흥이 깨져버릴 우려가 있기 때문에 파티장에 도착할 때 연주
중이던 노래는 반드시 종료되어야 한다. 예를 들어 오르페우스가
빠른 노래 : 5
중간 노래 : 2
느린 노래 : 1
의 속도로 걸어갈 수 있고 T가 4이고 L이 13일 경우 빠른 노래를 2번, 중간 노래를 1번, 느린
노래를 1번 연주할 경우 파티장에 4분만에 도착할 수 있으며 T보다 크지 않으므로 지각의 책임
을 피할 수 있다. 반면 빠른 노래를 3번 연주하면 3분만에 15의 거리를 이동할 수 있지만 파티
장에 도착하는 순간 노래가 종료되지 않기 때문에 이 방법은 불가능하다. 또한 T가 3일 때 최선
의 도착소요시간이 4분이면 지각의 책임을 져야 하며, 이 경우 파티장의 흥이 깨지게 된다.
오르페우스를 도와 L, T, N과 각 노래의 이동거리가 주어졌을 때 오르페우스가 도착할 수 있는
최선의 소요시간 B을 구하는 프로그램을 작성하시오.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 6 / 21
입력
첫째 줄에 디오니소스의 파티장까지의 거리 L, 남은 시간 T, 연주할 수 있는 노래의 곡 수 N이
주어진다.(1 ≤ L ≤ 1,000,000, 1 ≤ T ≤ 1,000,000, 1 ≤ N ≤ 10)
둘째 줄부터 N+1째 줄까지 각 곡의 이동거리가 한 줄에 하나씩 주어진다. 각 곡의 이동거리 값
은 1보다 크거나 같고 1,000보다 작거나 같은 자연수이다.
출력
해당 케이스에서 디오니소스의 파티장까지 걸리는 최적 소요시간이 T보다 작거나 같다면 해당 소
요시간 B를 첫째 줄에 출력한다. 만약 디오니소스의 파티장까지 T분 이내에 도착할 수 있는 방
법이 없거나, 아예 파티장에 도착할 수 있는 방법이 존재하지 않는다면 “I sincerely
apologize for being late”를 출력한다. 첫 글자는 대문자이고 대소문자를 구분하며 띄어쓰기
의 위치를 주의한다.
예제 입력 예제 출력
13 4 3
5
2
1
4
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 7 / 21
D. 약물 회수하기
시간제한 1초
각 마을에 금지 약물이 최대 1개씩 있다는 첩보를 입수했다. 약물 처리 특수 부대 알로하 조직원
은 약물을 회수하려고 특수 용기를 준비했다. 약물마다 등급이 있는데 같은 등급의 약물을 넣거
나 높은 등급의 약물을 낮은 등급의 약물보다 먼저 용기에 넣을 경우 폭발의 위험이 있기 때문에
주의해야 한다. 게다가 아무리 서로 다른 등급의 약물이라도 연속적인 등급을 가진 약물을 3연속
으로 담는 경우도 위험하다. 예를 들어 x등급의 약물을 이미 페트병에 담았다면 x이하의 등급의
약물은 더 이상 담을 수 없고 x등급, x+1등급의 약물을 담은 적이 있다면 x+2등급의 약물은 담
을 수 없다. 아래의 예시는 마을을 좌표로 나타내어 표현한 예시이다. L1, L2, L3, L4는 각각
1 ~ 4등급의 약물이고 검은색은 이동할 수 없는 지역이다. 각 모서리 부분은 좌표까지 표기되어
있다.
(5, 1) L3 L1 (5, 5) L2
L3
처음 출발 위치
(1, 1) L4 (1, 5) L4
예를 들어, (5, 4)의 L1약물을 회수하고 (5,5)의 L2약물을 회수하면 L3약물은 연속적인 등급의
약물이 되어 담지 못하고 L4약물을 담으러 가야 해서 14칸을 이동하여 3개의 약물을 가지고 출
발위치로 돌아올 수 있다. 반면 (5, 4)의 L1약물을 담고 (4, 4)의 L3약물을 담은 후 (1, 2)의
L4약물을 담고 처음 위치로 돌아오면 3개의 약물을 회수하고 12번만 칸을 이동하여 처음 위치로
돌아올 수 있다.
위 예시에서 이 경우보다 약물을 많이 회수하거나 같은 개수의 약물을 회수해 더 짧은 이동거리
로 돌아오는 경우는 없다. 같은 곳을 여러 번 지나가도 되며 약물이 있는 칸에 도착해도 원하지
않으면 약물을 회수하지 않아도 된다. 또한, 이동 중에 출발 위치에 중간에 도착해도 약물을 더
회수할 수 있다면 멈추지 않아도 되며 마을 밖으로는 이동할 수 없다. 마을의 범위는 항상 x, y
좌표값이 모두 1이상 100이하인 위치들이며 이동은 상하좌우만 허용되고 대각선은 허용되지 않
는다.
처음 출발 위치와 약물의 위치 및 이동 불가지역의 위치가 주어질 때 최대한 많은 약물을 회수하
고 출발점으로 돌아오고자 한다. 최대로 회수한 약물의 개수와 그때 이동한 최단거리를 구하여
라.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 8 / 21
입력
첫째 줄에 약물 또는 이동 불가지역의 개수 N과 처음 위치 (a, b)가 공백으로 구분되어 주어진
다. (1 ≤ N ≤ 100, 1 ≤ a ≤ 100, 1 ≤ b ≤ 100)
그 다음 줄부터 차례로 약물의 위치 (x, y)와 등급 R이 주어진다. (1 ≤ x ≤ 100, 1 ≤ y ≤ 100,
0 ≤ R ≤ N). 등급이 0인 경우 약물의 위치가 아니라 이동할 수 없는 칸을 나타낸다. 모든 약물
의 위치와 출발 위치 및 이동 불가지역은 서로 중복되지 않음이 보장된다.
출력
가장 많이 회수할 수 있는 약물의 개수와 그때의 이동거리의 최소값을 공백으로 구분하여 출력한
다. 만약 회수할 수 있는 약물이 하나도 없을 경우 가만히 있는 것이 가장 좋은 경우이다.
예제 입력 예제 출력
11 3 3
5 1 3
1 2 4
3 2 0
4 3 0
1 4 0
2 4 0
4 4 3
5 4 1
1 5 4
2 5 0
5 5 2
3 12
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 9 / 21
E. 369CLAPGAME
시간제한 2초
경준이와 기원이가 369게임을 하려고 한다. 369게임을 하는 도중 둘 다 너무 잘한다는 것을 깨
닫고 규칙을 바꾸어 369CLAP게임을 만들었다. 게임 룰은 다음과 같다.
A. 게임을 시작하기 전에 경준이와 기원이는 각자 2에서부터 36까지 적힌 카드 중 한 장
을 뽑는다. 이때 뽑은 카드의 숫자가 더 작은 사람부터 시작하며 만약 같은 숫자라면
기원이의 넓은 아량으로 경준이가 먼저 시작한다.
B. 1부터 차례대로 숫자를 서로 번갈아 가면서 말한다. 이때 숫자를 자신이 뽑은 카드의
숫자 진법으로 변환해서 말한다. 11진법 이상 변환 시 10은 A, 11은 B, 12는 C, …,
35는 Z로 변환한다.
C. 숫자(진법 변환 후)에 3, 6, 9, C, L, A, P가 있다면 숫자를 말하는 대신 박수를 쳐
야 한다. 만약 3, 6, 9, C, L, A, P가 여러 개 있다면 그 개수만큼 박수를 쳐야 한
다.
심판인 기택이는 안타깝게도 머리가 좋지 못하여 진법변환을 할 수가 없다. 기택이를 위해서 K
번째 순서에 무엇을 말해야 할지 질문하면 답을 알려주는 프로그램을 만들어주자.
입력
첫째 줄에 자연수 N, P, Q가 주어진다. (1 < N < 1,000, 2 ≤ P, Q ≤ 36) N은 기택이가 프로
그램에게 묻는 질문의 개수이고 P는 경준이가 뽑은 카드에 적힌 숫자, Q는 기원이가 뽑은 카드
에 적힌 숫자이다. 그리고 다음 N줄에 걸쳐 K(1 ≤ K ≤ 100,000,000)가 주어진다.
출력
첫째 줄부터 N째 줄에 걸쳐 구한 답을 출력한다. 박수는 “CLAP” 으로 출력한다.
예제 입력 예제 출력
5 8 16
5
14
15
27
42
5
E
17
CLAPCLAP
CLAP
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 10 / 21
F. 블록 쌓기
시간제한 1초
블록 쌓기 게임은 주어진 블록을 사용해서 가장 높이 쌓은 사람이 이기는 게임이다.
블록은 왼쪽 [그림 1]과 같은 사다리꼴 모양이며 [그림 2] 처럼 블록의 아래 면과 윗면의 길이가
일치해야 위에 쌓을 수 있다는 규칙이 있다. 단 가장 아래 블록은 어떤 블록이든 선택될 수
있다.
사다리꼴 블록의 윗면 길이(a), 아래 면의 길이(b), 높이(h)가 주어진다. 이때 주어진 블록을
한 번씩만 사용해서 쌓을 수 있는 블록의 최대 높이를 구하라.
입력
첫 번째 줄에 블록의 개수 N (1 ≤ N ≤ 10)가 주어진다.
두 번째 줄부터 N+1 번째 줄까지 각 줄에 세 개의 양의 정수가 주어진다. 각각 사다리꼴 블록
윗면의 길이 a (1 ≤ a ≤ 100), 아래 면의 길이 b (1 ≤ b ≤ 100), 높이 h (1 ≤ h ≤ 100)를
의미한다.
출력
주어진 블록을 한 번씩만 사용해서 쌓을 수 있는 최대 높이를 출력한다
예제 입력 예제 출력
4
3 2 2
2 5 3
5 4 2
4 4 2
9
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 11 / 21
G. 그녀를 찾아서
시간제한 1초
알파고 나라의 국왕에게는 아름다운 공주가 있다. 공주가 결혼할 나이가 되자 국왕은 성에 다음
과 같은 공고문을 냈다.
알파고 나라에서 용병생활을 하던 채홍이는 이 공고문을 보고 공주와 결혼을 한다면 떠돌이 용병
생활도 청산할 수 있고 아름다운 공주도 함께 얻을 수 있을 것이라고 생각했다. 채홍이는 공고문
의 뒷면에 있는 장소로 가서 도전자 등록을 하였다.
공고문에 적힌 날짜가 되자, 채홍이는 사람들이 모여있는 왕궁으로 갔다. 국왕은 지혜와 용기는
함께해야 하는 것이라며 테스트는 단 한가지라고 하였다. 테스트는 다음과 같은 방식으로 이루어
진다.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 12 / 21
테스트를 하는 장소는 <그림 1>과 같이 N x M의 방으로 이루어져 있다. 각 방에는 몬스터가 있
으며 숫자는 그 몬스터의 체력을 나타낸다. 방을 통과하려면 몬스터를 잡아야 하는데 몬스터를
잡는데 걸리는 시간은 체력 1당 1초가 걸린다. 방을 이동할 때에는 방향을 전환하지 않으면 시
간이 걸리지 않지만(0초) 방향을 전환하는 데에는 1초의 시간이 걸린다.
예를 들어 (1, 1)에서 (1, 2), (2, 2), (2, 3)으로 가는것과 (2, 1), (2, 2), (2, 3)으로 가
는 것은 잡아야 할 몬스터의 체력이 7, 9, 3, 2로 모두 같지만 전자의 경우에는 방향전환을 2번
해야해서 23의 시간이 들지만 후자의 경우에는 방향전환을 1번하기 때문에 22의 시간이 든다.
시작점인 (1, 1)에서 아래(2, 1)로 가거나 오른쪽(1, 2)로 가는 것은 방향전환을 했다고 생각
하지 않는다.
테스트는 왼쪽 상단 (1, 1)에서 출발하여 우측 하단 (N, M)에 도달하면 종료된다. 시작점과 도
착점의 몬스터도 잡아야 한다.
국왕은 이 테스트를 제일 먼저 통과하는 사람에게 공주와 결혼할 수 있는 기회를 주겠다고 했다.
채홍이를 도와 출발지에서 도착지까지 걸리는 가장 짧은 시간을 구해보자.
입력
입력의 첫 줄에는 테스트 장소의 크기를 나타내는 N과 M (1 ≤ N, M ≤ 500)이 주어진다. N은 세
로길이를 나타내고 M은 가로길이를 나타낸다. 다음 N개의 줄에는 각 방의 몬스터의 체력을 나타
내는 x가 M개 주어진다. 몬스터의 체력은 10을 넘지 않는 자연수이다. (1 ≤ x ≤ 10)
출력
채홍이가 테스트를 끝낼 수 있는 가장 짧은 시간을 출력하라.
예제 입력 예제 출력
3 5
7 9 4 5 5
9 3 2 2 2
3 8 10 5 6
33
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 13 / 21
H. HY수열
시간제한 1초
입사 한 지 얼마 안 된 주람이는 팀의 막내로 HY수열에 관한 일을 하고 있다. HY수열은 H수열과
Y수열로 나뉘며 i번째 H수열은 다음과 같이 정의 된다. (3 ≤ i)
1. i이하의 자연수로 만들 수 있는 분수 중 값이 1이하인 분수를 모두 구한다.
2. 분수들 중 기약분수만을 남기고 지운다.
3. 분수들을 오름차순으로 정렬한다.
위와 같은 방법으로 수열을 구하면 3번째 H수열은 {1/3, 1/2, 2/3, 1/1} 이다.
이 때 i번째 Y수열은 i번째 H수열을 바보셈으로 계산하여 구할 수 있다. 바보셈이란 분수 계산
에 사용되는 셈이다. 바보셈은 ∎로 나타내며 다음과 같이 정의된다.
𝑏
𝑎
∎
𝑑
𝑐
=
𝑏 + 𝑑
𝑎 + 𝑐
i번째 H수열의 크기가 k라고 할 때 i번째 Y수열의 j번째 항은 다음과 같다.
𝑌𝑖,𝑗 = 𝐻𝑖,𝑗∎ 𝐻𝑖,𝑗+2 ( j ≤ k − 2 )
(𝐻𝑖,𝑗는 i번째 H수열의 j번째 항이고 𝑌𝑖,𝑗는 i번째 Y수열의 j번째 항이다.)
오늘 주람이가 해야 할 일은 𝐹𝑖의 값을 구하는 것이다.
𝐹𝑖 = ∑ 𝐻𝑖,𝑗
𝑘
𝑗=1
− ∑ 𝑌𝑖,𝑗
𝑘 − 2
𝑗=1
일을 열심히 하던 주람이는 이대로 하다간 제시간에 퇴근할 수 없다는 생각이 들었다. 일을 빨리
처리할 수 있도록 𝐹𝑖값을 구하는 프로그램을 만들어주자.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 14 / 21
입력
첫째 줄에 i(3 ≤ I ≤1,000,000,000)의 값이 주어진다.
출력
𝐹𝑖를 기약분수로 나타냈을 때 p/q가 된다. 이 때 p, q를 한 줄에 공백으로 구분하여 출력한다.
예제 입력 예제 출력
3 4 3
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 15 / 21
I. 보고서 검사
시간제한 1초
이번에 새로 들어온 조교가 수업을 맡게 되었다. 수업을 맡은 이 조교는 학생들에게 과제를 내주
었는데, 과제를 베끼는 학생들이 있어서 과제를 엄격하게 검사하기로 했다. 조교가 보고서를 검
사하는 과정은 다음과 같다.
1. 학생들에게 받은 보고서가 양식에 잘 맞는지 확인한다. (글자수 검사 등)
2. 학생들에게 받은 보고서를 모두 보면서 대필 검사와 표절 검사를 한다.
3. 대필 검사와 표절 검사에 걸린 보고서를 제외한 나머지 보고서를 확인하여 주제에 맞게
썼는지 확인한다.
4. 주제에 맞게 잘 썼는지 검사하고, 조교의 판단 하에 적절한지를 점수로 메긴다.
조교는 위와 같은 검사를 하던 중, 표절 검사를 대신 수행시켜주는 프로그램이 필요하다고 생각
하였다. 하지만 표절 검사기를 만드는 것이 매우 어렵기 때문에 간단한 표절검사기를 만들기로
하였다. 만들 표절 검사기는 다음과 같은 기능을 수행한다.
1. 각 보고서 내용에 포함되는 문자들이 몇 번 출현하였는지 센다.
2. 각 보고서에 출현된 문자들의 개수가 같으면 같은 보고서라고 판단하고, 아니면 표절하
지 않은 보고서라고 판단한다.
조교를 위해 우리가 해야할 일은 간단한 표절 검사기를 만들기 위해 각 보고서 내용에 포함되는
문자들이 몇 번 출현하였는지 숫자를 세는 프로그램을 작성해야 한다.
입력
첫 줄에 테스트케이스의 개수 T가 주어진다.
각 테스트케이스의 첫째 줄에는 보고서 내용의 길이 N (1≤N≤100,000)이 주어진다.
그 다음줄에는 보고서의 내용이 주어진다. 단, 보고서의 내용은 영소문자(a-z), 영대문자(A-Z),
숫자(0-9)로만 이루어져 있다.
출력
각 테스트케이스에 대하여 각각의 라인에 어떤 문자들이 몇 번 출현하였는지 개수를 공백으로 구
분하여 출력한다. 단, 하나도 출현이 되지 않은 문자들은 제외하며, 각 문자들을 사전순으로 출
력한다.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 16 / 21
예제 입력 예제 출력
2
6
aaabbb
11
10AAbbBC123
a 3
b 3
0 1
1 2
2 1
3 1
A 2
B 1
C 1
b 2
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 17 / 21
J. 자석 꽂아넣기
시간제한 1초
얼마 전에 나온 문명 VI를 하던 하진이는 보드게임에 흥미를 가지게 되었다. 그중 하나는 하노
이의 탑으로, 기둥이 겨우 세 개 밖에 없어 세상이 망하는 날이 오래 간다는 사실을 깨달은 그는
기둥의 개수를 늘려보고자 했다. 하지만 기둥의 개수를 늘려본 결과 너무나도 쉽게 세상이 멸망
한다는 것을 알았고, 금세 흥미를 잃게 되었다.
얼마 후 다른 조건을 걸어 보기로 한 하진이는 새로운 보드게임을 만들어냈다. 두 공에 적힌 번
호의 합이 완전 제곱수면 인력이 작용해 자석처럼 붙게 되고 그 외에는 엄청난 척력이 작용하여
같이 끼우지 못하게 되는 것이다.
공을 한 번에 하나씩, 번호가 커지는 순서로 기둥에 끼우는 게임을 한다. 즉 1번을 끼우고 나서
2번을 끼우고, 그리고 나서 3번을 끼우고 하는 식으로 공을 기둥에 끼우며, 더 이상 밀어내지
않도록 공을 끼울 수 없게 되면 게임이 끝났다. 게임의 목표는 최대한 많은 개수의 공을 끼우는
것이다. 위에 있는 그림에는 기둥이 네 개인 경우에 최대한 많은 공을 끼운 결과가 나와있다.
여러분은 하진이와 준근이가 하는 이 게임을 준근이를 도와 같이 하게 되었다. 공을 서로 번갈아
가며 끼운다고 할 때, 먼저 시작하는 쪽이 유리한지 불리한지 알게 하기 위해 몇 개까지 끼울 수
있는지 알려 달라는 준근이를 도와 게임에서 이기게 해 주자.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 18 / 21
입력
첫째 줄에 쓸 수 있는 기둥의 개수를 나타내는 정수 N(1 ≤ N ≤ 63)이 입력된다.
출력
기둥에 끼울 수 있는 공의 최대 개수를 나타내는 정수를 출력한다. 끼울 수 있는 공의 개수가 무
한하면 -1을 출력한다.
예제 입력 예제 출력
4 11
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 19 / 21
K. 비숍 배치하기
시간제한 2초
체스에는 대각선 방향으로 움직일 수 있는 비숍이 있다. <그림 1>과 같은 정사각형 체스 판 위
에 B라고 표시된 곳에 비숍은 대각선 방향으로 움직여 O로 표시된 칸에 있는 다른 말을 잡을 수
있다.
그런데 체스판 위에는 비숍 뿐만 아니라 룩도 있다. <그림 2>와 같은 정사각형 체스 판 위에 R
이라고 표시된 곳에 룩은 상하좌우로 움직여 O로 표시된 칸에 있는 다른 말을 잡을 수 있다.
또한 체스판 위에는 비숍과 룩이 지나갈 수 없는 장애물이 놓일 수 있다. 예를 들어 <그림 3>과
같이 체스판 중앙에 장애물이 있으면 비숍은 오른쪽 아래 대각선 방향으로는 움직일 수 없고
룩은 왼쪽 방향으로 움직일 수 없다.
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 20 / 21
체스판 위에 룩과 장애물이 이미 있다고 할 때 비숍과 룩이 서로를 잡지 못하게 하고, 비숍과 비
숍이 서로를 잡지 못하게 하려 할 때, 비숍을 놓을 수 있는 최대 개수를 구하는 프로그램을 작성
하시오. 단, 룩과 룩은 서로가 서로를 잡을 수 있는 위치에 주어진다고 해도 서로 공격하지 않는
다.
입력
첫째 줄에 정사각형 체스판의 크기 N(1 ≤ N ≤ 200)이 주어진다. 둘째 줄부터 아래의 예와 같이
체스판의 상태가 주어진다. ‘0’은 빈 칸을 의미하고, ‘1’은 그 칸에 룩이 있음을 의미한다. ‘2’
는 그 칸에 장애물이 있음을 의미한다.
출력
주어진 체스판에 비숍을 배치할 때, 최대 몇 개를 배치할 수 있는지 출력한다
예제 입력 예제 출력
5
00000
00000
00000
00000
00000
8
2016 한양대학교 프로그래밍 경시대회(Advanced Division)
페이지 21 / 21
L. 크리스마스 전구
시간제한 2초, 메모리 제한 64MB
석기와 수진이는 다가올 크리스마스를 맞아 학생회실에 전구를 설치하려고 한다. 전구의 종류에
는 A~Z 타입이 있는데, 석기와 수진이의 생각이 서로 달라 싸우기 시작했다. 이를 보던 수현이
는 ‘석기가 설치하고자 하는 전구 순열’과 ‘수진이가 설치하고자 하는 전구 순열’의 ‘공통 부분
순열’의 길이가 최대가 되는 순열을 제시하여 싸움을 중재하기로 했다. 부분 순열이란, 원래 수
열의 일부 항을 원래 순서대로 나열해서 얻을 수 있는 수열을 의미하며, 공통 부분 순열이란 주
어진 수열들 모두에 해당하는 부분 순열을 의미한다.
입력
첫째 줄에 ‘석기가 설치하고자 하는 전구 순열’, 둘째 줄에 ‘수진이가 설치하고자 하는 전구 순
열’이 문자열로 입력된다. 각 순열들은 로마자 대문자로만 공백없이 구성되어 입력된다. 각 순
열들은 로마자 대문자로만 공백없이 구성되며 각각 순열의 길이는 1이상 10,000 이하이다.
출력
수진이가 제시 해야 할 순열을 출력한다. 단, 여러 가지가 가능할 경우 그 중 아무거나 하나만
출력한다. 공통 부분 순열의 길이가 0일 경우, 따옴표 없이 “Not Match” 를 출력한다.
예제 입력 예제 출력
GEUNHYE
SUNSIL
UN

Contenu connexe

Tendances

[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제NAVER D2
 
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced partNAVER D2
 
한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_알고리즘반한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_알고리즘반NAVER D2
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01Jisu Lee
 
한양대학교 ALOHA - 봄내전대회_C언어반
 한양대학교 ALOHA - 봄내전대회_C언어반 한양대학교 ALOHA - 봄내전대회_C언어반
한양대학교 ALOHA - 봄내전대회_C언어반NAVER D2
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이NAVER D2
 
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제NAVER D2
 
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제NAVER D2
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이NAVER D2
 
세미나
세미나세미나
세미나Dongyi Kim
 
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)NAVER D2
 
한양대 2017 hcpc advanced division 문제
한양대 2017 hcpc advanced division 문제한양대 2017 hcpc advanced division 문제
한양대 2017 hcpc advanced division 문제NAVER D2
 
2015 한양대학교 프로그래밍 경시대회 - advanced division
2015 한양대학교 프로그래밍 경시대회 - advanced division2015 한양대학교 프로그래밍 경시대회 - advanced division
2015 한양대학교 프로그래밍 경시대회 - advanced divisionNAVER D2
 
서울대학교 2017 SNUPC 문제 - Advanced
서울대학교 2017 SNUPC 문제 -  Advanced서울대학교 2017 SNUPC 문제 -  Advanced
서울대학교 2017 SNUPC 문제 - AdvancedNAVER D2
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제NAVER D2
 
인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제NAVER D2
 
shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이HYUNJEONG KIM
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced partNAVER D2
 
서울대학교 2017 SNUPC 문제
서울대학교 2017 SNUPC 문제서울대학교 2017 SNUPC 문제
서울대학교 2017 SNUPC 문제NAVER D2
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이NAVER D2
 

Tendances (20)

[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제[KAIST - RUN] 프로그래밍 경진대회 문제
[KAIST - RUN] 프로그래밍 경진대회 문제
 
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_advanced part
 
한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_알고리즘반한양대학교 ALOHA - 봄내전대회_알고리즘반
한양대학교 ALOHA - 봄내전대회_알고리즘반
 
쏙 알고스터디 01
쏙 알고스터디 01쏙 알고스터디 01
쏙 알고스터디 01
 
한양대학교 ALOHA - 봄내전대회_C언어반
 한양대학교 ALOHA - 봄내전대회_C언어반 한양대학교 ALOHA - 봄내전대회_C언어반
한양대학교 ALOHA - 봄내전대회_C언어반
 
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
[D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제풀이
 
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 본선문제
 
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
SHAKE - 경기 남부 4개대학 연합 프로그래밍 경시대회 본선문제
 
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
[D2 CAMPUS] 부산대 Alcall 프로그래밍 경시대회 문제 풀이
 
세미나
세미나세미나
세미나
 
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
[SHAKE] 경인지역 6개연합 프로그래밍 경시대회 - 예선문제(아주대)
 
한양대 2017 hcpc advanced division 문제
한양대 2017 hcpc advanced division 문제한양대 2017 hcpc advanced division 문제
한양대 2017 hcpc advanced division 문제
 
2015 한양대학교 프로그래밍 경시대회 - advanced division
2015 한양대학교 프로그래밍 경시대회 - advanced division2015 한양대학교 프로그래밍 경시대회 - advanced division
2015 한양대학교 프로그래밍 경시대회 - advanced division
 
서울대학교 2017 SNUPC 문제 - Advanced
서울대학교 2017 SNUPC 문제 -  Advanced서울대학교 2017 SNUPC 문제 -  Advanced
서울대학교 2017 SNUPC 문제 - Advanced
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 문제
 
인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제인하대 프로그래밍 경진대회 - 문제
인하대 프로그래밍 경진대회 - 문제
 
shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이shake! 2016 예선 문제 풀이
shake! 2016 예선 문제 풀이
 
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
[한양대 aloha] 프로그래밍 경진대회 문제_Advanced part
 
서울대학교 2017 SNUPC 문제
서울대학교 2017 SNUPC 문제서울대학교 2017 SNUPC 문제
서울대학교 2017 SNUPC 문제
 
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
KAIST RUN 교내 ACM-ICPC 모의대회 Advanced division 풀이
 

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

2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions현정 김
 
2019 홍익대학교 프로그래밍 경진대회 풀이 슬라이드 (Open Contest용)
2019 홍익대학교 프로그래밍 경진대회 풀이 슬라이드 (Open Contest용)2019 홍익대학교 프로그래밍 경진대회 풀이 슬라이드 (Open Contest용)
2019 홍익대학교 프로그래밍 경진대회 풀이 슬라이드 (Open Contest용)GreenJung1
 
이산치보고서
이산치보고서이산치보고서
이산치보고서mil23
 
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이현정 김
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서KimChangHoen
 

Similaire à [D2 CAMPUS] 2016 한양대학교 프로그래밍 경시대회 문제 (6)

2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions2018 Ajou Programming Contest solutions
2018 Ajou Programming Contest solutions
 
2019 홍익대학교 프로그래밍 경진대회 풀이 슬라이드 (Open Contest용)
2019 홍익대학교 프로그래밍 경진대회 풀이 슬라이드 (Open Contest용)2019 홍익대학교 프로그래밍 경진대회 풀이 슬라이드 (Open Contest용)
2019 홍익대학교 프로그래밍 경진대회 풀이 슬라이드 (Open Contest용)
 
2016 UCPC 풀이
2016 UCPC 풀이2016 UCPC 풀이
2016 UCPC 풀이
 
이산치보고서
이산치보고서이산치보고서
이산치보고서
 
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
2019 경인지역 6개대학 연합 프로그래밍 경시대회 shake! 풀이
 
이산치3보고서
이산치3보고서이산치3보고서
이산치3보고서
 

Plus de NAVER D2

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다NAVER D2
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...NAVER D2
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기NAVER D2
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발NAVER D2
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈NAVER D2
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&ANAVER D2
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기NAVER D2
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep LearningNAVER D2
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applicationsNAVER D2
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingNAVER D2
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지NAVER D2
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기NAVER D2
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화NAVER D2
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)NAVER D2
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기NAVER D2
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual SearchNAVER D2
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화NAVER D2
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지NAVER D2
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터NAVER D2
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?NAVER D2
 

Plus de NAVER D2 (20)

[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다[211] 인공지능이 인공지능 챗봇을 만든다
[211] 인공지능이 인공지능 챗봇을 만든다
 
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
[233] 대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing: Maglev Hashing Scheduler i...
 
[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기[215] Druid로 쉽고 빠르게 데이터 분석하기
[215] Druid로 쉽고 빠르게 데이터 분석하기
 
[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발[245]Papago Internals: 모델분석과 응용기술 개발
[245]Papago Internals: 모델분석과 응용기술 개발
 
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
[236] 스트림 저장소 최적화 이야기: 아파치 드루이드로부터 얻은 교훈
 
[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A[235]Wikipedia-scale Q&A
[235]Wikipedia-scale Q&A
 
[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기[244]로봇이 현실 세계에 대해 학습하도록 만들기
[244]로봇이 현실 세계에 대해 학습하도록 만들기
 
[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning[243] Deep Learning to help student’s Deep Learning
[243] Deep Learning to help student’s Deep Learning
 
[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications[234]Fast & Accurate Data Annotation Pipeline for AI applications
[234]Fast & Accurate Data Annotation Pipeline for AI applications
 
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load BalancingOld version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
Old version: [233]대형 컨테이너 클러스터에서의 고가용성 Network Load Balancing
 
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
[226]NAVER 광고 deep click prediction: 모델링부터 서빙까지
 
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
[225]NSML: 머신러닝 플랫폼 서비스하기 & 모델 튜닝 자동화하기
 
[224]네이버 검색과 개인화
[224]네이버 검색과 개인화[224]네이버 검색과 개인화
[224]네이버 검색과 개인화
 
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
[216]Search Reliability Engineering (부제: 지진에도 흔들리지 않는 네이버 검색시스템)
 
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
[214] Ai Serving Platform: 하루 수 억 건의 인퍼런스를 처리하기 위한 고군분투기
 
[213] Fashion Visual Search
[213] Fashion Visual Search[213] Fashion Visual Search
[213] Fashion Visual Search
 
[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화[232] TensorRT를 활용한 딥러닝 Inference 최적화
[232] TensorRT를 활용한 딥러닝 Inference 최적화
 
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
[242]컴퓨터 비전을 이용한 실내 지도 자동 업데이트 방법: 딥러닝을 통한 POI 변화 탐지
 
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
[212]C3, 데이터 처리에서 서빙까지 가능한 하둡 클러스터
 
[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?[223]기계독해 QA: 검색인가, NLP인가?
[223]기계독해 QA: 검색인가, NLP인가?
 

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

  • 1. 제 3 회 한양대학교 프로그래밍 경시대회 -Beginner Division- 2016. 11. 12 주최 및 후원 한양대학교 컴퓨터공학부 한양대학교 ACM-ICPC 대표팀 한양대학교 컴퓨터공학부 특성화사업단 한양대학교 컴퓨터공학부 어코드사업단 NAVER D2 NCSOFT 삼성 소프트웨어 멤버십 대회 유의사항 1. 대회 진행시간은 3 시간 입니다. 2. 해결한 문제 수, 푸는데 사용한 시간에 따른 페널티로 순위를 결정합니다. 3. 대회 종료 후, 결과 발표 및 시상이 있을 예정입니다.
  • 2. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 2 / 20 A. 불량품 걸러내기 시간제한 1초 한양대학교 학생인 경준이는 이번 학기에 장학금을 받지 못해 알바로 돈을 벌기로 했다. 경준이 가 시작한 알바는 아래의 그림과 같이 “Hanyang” 로고가 들어가 있는 뱃지들 중에 불량품을 걸 러내는 작업이다. 로고는 반시계 방향으로 읽는다. 아래의 로고는 H부터 시작해서 Hanyang으로 읽을 수도 있지만, y부터 시작해서 yangHan으로 읽을 수도 있다. Hanyang yangHan 입력 첫째 줄에 “Hanyang” 로고의 글자가 주어진다. 둘째 줄에 작업해야 할 총 뱃지들의 개수 N이 주어진다. (1 ≤ N ≤ 100) 다음 N개의 줄에 1번부터 차례대로 번호가 붙고, 7글자의 알파벳 수열이 주어진다. 대소문자를 구별하고, 소문자와 대문자 이외의 글자가 들어가는 경우는 없다. 출력 불량품의 번호를 한 줄씩 출력한다. 불량품이 없을 경우 0을 출력한다. 예제 입력 예제 출력 Hanyang 5 Hanyang yangHan hanyang angahny gnaynaH 3 4 5
  • 3. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 3 / 20 B. 최고의 치료사 시간제한 1초 세계 평화를 지키기 위해 영웅들로 구성된 다국적 특수 부대, 오버워치가 결성되었다. 오버워치 의 영웅들은 오늘도 악당들과 맞서 싸운다. 오버워치의 치료사 루시우는 음악을 통해 주변의 다 친 영웅들을 치료할 수 있다. 루시우를 도와 다친 영웅들의 위치가 주어졌을 때 루시우가 최대로 많이 치료할 수 있는 위치 좌표를 출력하시오. 치료 범위는 단위길이 a X a 크기의 정사각형 형태이다. 편의를 위해 영웅은 격자 위에 있는 점이라고 가정한다. 그림의 진한 정사각형은 치료범위이다. 루시우의 위치는 (2.5, 3.5)이고 세 영웅의 위치가 (1,5), (1,0), (4,4)이고 치료 범위가 3일 때의 상황이다. 이 경우 최대 2명의 영웅을 치료할 수 있다. 입력 첫 번째 줄에 다친 영웅의 수 N(1 ≤ N ≤ 100)과 범위 a (1 ≤ a ≤ 100)가 주어진다. 그 다음 줄부터 각 영웅의 위치가 한 줄씩 주어진다. 위치는 X Y 순서의 숫자로 주어진다. (0 ≤ X, Y ≤ 100) 출력 영웅을 최대한 치유할 수 있는 루시우의 위치를 출력한다.
  • 4. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 4 / 20 예제 입력 예제 출력 3 3 1 5 1 0 4 4 2.5 3.5
  • 5. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 5 / 20 C. 전설의 포켓몬 시간제한 1초 수영이, 정원이, 석기, 지훈이는 Pokemon GO에 푹 빠져 포켓몬 마스터를 꿈꾸고 있다. 그러던 중 수영이와 친구들은 속초에서 전설의 포켓몬 뮤츠가 나타난다는 엄청난 정보를 듣고 당장 속초 로 출발하기로 한다. 사람들은 뮤츠가 속초 어디서든 나타날 수 있다고 했지만 수영이와 친구들 은 뮤츠가 반드시 특정 구역 내에서만 나타난다는 사실을 밝혀냈다. 특정 구역은 다음과 같이 너 비가 M, 높이가 N인 직사각형 모양을 하고 있다. . 속초에 도착한 수영이와 친구들은 뮤츠가 나타날 때까지 어디에서 기다릴지 정하기로 했다. 하지 만 각자 원하는 위치가 모두 달랐고 각자 자신이 정한 위치가 가장 좋다고 우겼기 때문에 한 곳 으로 정할 수가 없었다. 수영이와 친구들은 결국 네 장소 중 뮤츠를 잡는 데에 드는 비용의 기댓 값이 가장 작은 곳에 가기로 결정하게 되었다. 수영이와 친구들을 위해 가장 기댓값이 작은 곳이 어디인지 알려주자. 수영이와 친구들이 선택한 장소는 XY좌표로 나타낸다. XY좌표는 특정 구역 내에서의 위치를 말 한다. 특정구역의 가장 왼쪽 아래의 위치는 (0, 0)으로 나타낼 수 있고 가장 오른쪽 위의 위치 는 (M, N)로 나타낼 수 있다. 뮤츠가 등장한 장소를 (a, b)라고 할 때 어떤 장소 (x, y)에서 (a, b)로 이동하는 데에 드는 비용은 S는 다음과 같이 정의된다. M N
  • 6. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 6 / 20 𝑥 𝑑 = 𝑎 − 𝑥 𝑦 𝑑 = b − y S = 3𝑥 𝑑 2 + 6𝑦 𝑑 2 특정 구역 내의 모든 위치는 뮤츠가 등장할 확률이 P 로 같으며 모든 확률 값의 합은 1 이다. 다음은 위키백과에 정의된 기댓값의 정의이다. 입력 첫째 줄에 특정 구역의 너비 M, 특정 구역의 높이 N이 주어진다. (4 ≤ M, N ≤ 100) 다음 4줄에는 수영이와 친구들이 각자 원하는 위치의 x, y의 값이 한 줄마다 주어진다. (0 ≤ x ≤ M, 0 ≤ y ≤ N) M, N, x, y는 정수로 주어진다. (뮤츠가 등장하는 위치의 좌표는 정수가 아닐 수도 있다.) 출력 가장 기댓값이 작은 위치의 기댓값을 소수점 첫째 자리에서 반올림하여 출력한다.
  • 7. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 7 / 20 예제 입력 예제 출력 4 5 1 2 3 0 0 1 2 5 21
  • 8. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 8 / 20 D. 데이트 하기 좋은 날씨 시간제한 1초 정무는 모태솔로 탈출을 위해 소개팅을 하기로 하였다. 처음으로 하는 소개팅에 신이 난 정무는 데이트 코스를 열심히 짜고 있었다. 데이트하기 좋은 장소와 주변의 맛집을 찾아보고 데이트하는 날에 입을 옷까지 정한 정무는 소개팅을 할 날짜를 정하지 않았다는 사실을 깨달았다. 어느 날이 좋을지 고민하던 정무를 날씨를 보고 정하기로 하였다. 다음주 중 가장 강수 확률이 낮은 요일이 언제일지 알려주자. 입력 첫째 줄에 월요일부터 일요일까지의 강수 확률이 순서대로 7개의 숫자로 주어진다. 각 숫자는 0 이상 100이하의 정수이다. 각 요일의 강수확률은 모두 다르다. 출력 각 테스트 케이스에 대해 한 줄에 하나씩 N에 대한 M을 출력한다. 예제 입력 예제 출력 10 25 30 40 55 18 5 SUN
  • 9. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 9 / 20 E. 결혼식 시간제한 1초 오늘도 열심히 나라를 지키고 있는 모 지역의 한 부대에 복무중인 안 모 소대장이 마침내 결혼식 을 올리게 되었다. 이로 인해 최소 인원을 남긴 전 부대원이 포상 외출을 나가 결혼식에 참여하 게 되었지만 결혼식에 참여하면 일손을 돕고, 축가나 기타 허드렛일 등을 수행하는 잡일 담당이 될 수 있다는 끔찍한 소식을 듣게 되었다. 그리하여 머리를 맞댄 부대원들은 한가지 꾀를 내게 되었는데 이 꾀인즉, 부대원들의 수가 많기 때문에 1명정도는 없더라도 티가 안 날 것이라는 것 이었다. 그래서 부대원들은 한 명의 불참러를 뽑아 말그대로 자유롭게 포상 외출을 즐기고 오도 록 궁극의 복불복을 하게 되었다. 이 행복한 불참러를 선발하는 과정은 다음과 같다. 1. 시작은 가장 계급이 높은 왕고부터 시작하며, 자신부터 시계방향으로 K 번째의 사람을 찾는다. 2. K 번째 사람은 결혼식장에 들어가고 다음 사람부터 다시 시계방향으로 K 번째 사람을 찾 는다. 3. 2 번 과정을 1 명이 남을 때까지 반복한다. 이 과정을 빠르게 이해한 프로불참러 조세호 일병은 이 결혼식을 불참하려면 정확히 자신이 왕고 로부터 시계방향으로 P번째에 위치해야 한다는 것을 알아냈다. 예를 들어 7명의 부대원들이 K를 3으로 정하여 불참러를 정하는 과정을 나타내면 다음과 같다.
  • 10. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 10 / 20 위의 그림을 보면 왕고로부터 시계방향으로 3번째 위치에 존재하는 C의 자리가 불참러의 위치이 고 P의 값은 3이 된다. 조세호 일병이 자신의 소신을 지킬 수 있도록 외출한 부대원의 수 N과 불참러를 뽑는 기준 K가 입력으로 주어질 때 P의 값을 출력하는 프로그램을 만들어 주자. 입력 첫째 줄에 외출한 부대원의 수 N과 불참러를 선발하는 기준 값인 K가 주어진다. (1 ≤ N, K ≤ 100) 출력 해당 케이스에서 조세호 일병이 결혼식을 불참할 수 있는 위치값 P를 출력한다. 만약 왕고의 위 치가 불참할 수 있는 위치라면 자신은 왕고가 아니기 때문에 “Pro-attendee”이라고 출력한다. 이 때 대소문자를 구분함을 주의한다. 예제 입력 예제 출력 7 3 3
  • 11. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 11 / 20 F. 보고서 검사 시간제한 1초 이번에 새로 들어온 조교가 수업을 맡게 되었다. 수업을 맡은 이 조교는 학생들에게 과제를 내주 었는데, 과제를 베끼는 학생들이 있어서 과제를 엄격하게 검사하기로 했다. 조교가 보고서를 검 사하는 과정은 다음과 같다. 1. 학생들에게 받은 보고서가 양식에 잘 맞는지 확인한다. (글자수 검사 등) 2. 학생들에게 받은 보고서를 모두 보면서 대필 검사와 표절 검사를 한다. 3. 대필 검사와 표절 검사에 걸린 보고서를 제외한 나머지 보고서를 확인하여 주제에 맞게 썼는지 확인한다. 4. 주제에 맞게 잘 썼는지 검사하고, 조교의 판단 하에 적절한지를 점수로 메긴다. 조교는 위와 같은 검사를 하던 중, 표절 검사를 대신 수행시켜주는 프로그램이 필요하다고 생각 하였다. 하지만 표절 검사기를 만드는 것이 매우 어렵기 때문에 간단한 표절검사기를 만들기로 하였다. 만들 표절 검사기는 다음과 같은 기능을 수행한다. 1. 각 보고서 내용에 포함되는 문자들이 몇 번 출현하였는지 센다. 2. 각 보고서에 출현된 문자들의 개수가 같으면 같은 보고서라고 판단하고, 아니면 표절하 지 않은 보고서라고 판단한다. 조교를 위해 우리가 해야할 일은 간단한 표절 검사기를 만들기 위해 각 보고서 내용에 포함되는 문자들이 몇 번 출현하였는지 숫자를 세는 프로그램을 작성해야 한다. 입력 첫 줄에 테스트케이스의 개수 T가 주어진다. 각 테스트케이스의 첫째 줄에는 보고서 내용의 길이 N (1 ≤ N ≤ 100,000)이 주어진다. 그 다음줄에는 보고서의 내용이 주어진다. 단, 보고서의 내용은 영소문자(a-z), 영대문자(A-Z), 숫자(0-9)로만 이루어져 있다. 출력 각 테스트케이스에 대하여 각각의 라인에 어떤 문자들이 몇 번 출현하였는지 개수를 공백으로 구 분하여 출력한다. 단, 하나도 출현이 되지 않은 문자들은 제외하며, 각 문자들을 사전순으로 출 력한다.
  • 12. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 12 / 20 예제 입력 예제 출력 2 6 aaabbb 11 10AAbbBC123 a 3 b 3 0 1 1 2 2 1 3 1 A 2 B 1 C 1 b 2
  • 13. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 13 / 20 G. 정 원이와 정원이 시간제한 1초 성은 정 이고, 이름은 원이인 정원이는 컴퓨터공학부의 멋진 복학생이다. 헌데, 이번에 새로 들 어온 새내기 중 이정원이라는 친구(성은 이, 이름은 정원)가 들어왔다. 둘다 정원이라고 표기하 면 헷갈릴 수 있으니 이글에서는 이제부턴 정 원이는 원이씨로, 이 정원은 정원씨로 표기하겠다. 정원씨가 들어온 후, 원이씨는 주변에서 평소 자기에게 깍듯하게 대하던 후배들이 ‘정원이 이놈 어딨냐?’, ‘정원이 좀 멍청하지 않냐?’ 등의 말을 하는 것을 듣고 묘하게 기분이 나빴다. 사람 들이 ‘정원이’하고 부를 때마다 헷갈리는 것은 정원씨도 마찬가지였다. 그래서 둘은 개명을 걸고, 내기를 하기로 했다. 내기 종목은 구슬 게임이다. 구슬 게임의 법칙 은 다음과 같다. 탁자 위에 구슬 N개가 있다. 두 사람이 턴을 번갈아 가면서 구슬을 가져가며, 구슬은 1개, a개, b (1 < a < b ≤ 5)개 만큼 가져갈 수 있다. 마지막 구슬을 가져가는 사람이 게임을 이기게 된 다. a, b는 1초과 5이하 수에서 서로 다른 두개가 무작위로 주어진다. 두 명 다 완벽하게 게임 을 한다. 게임은 원이씨가 먼저 시작한다. a, b가 주어졌을 때 원이씨가 이길 확률(구슬의 개수 가 모든 자연수 범위에서 무작위로 하나 주어진다고 생각했을 때, 원이씨가 이길 확률)을 구하 고, 그 뒤 구슬의 개수 N이 주어졌을 때 누가 이기는지 구하는 프로그램을 작성 하시오. 입력 첫째 줄에 두 정수 a, b가 주어진다. 둘째 줄에는 구슬의 개수 N이 주어진다. (1 ≤ N ≤ 1,000,000,000,000) 출력 첫째 줄에는 원이씨가 이길 확률을 기약분수의 형태로 나타내어 출력한다. 둘째 줄에는 N이 주어졌을 때 이기는 사람을 출력한다. 원이씨가 이길 경우는 ‘Won’을 정원씨가 이길 경우는 ‘Jung’을 출력한다. 예제 입력 예제 출력 2 4 4 2/3 Won
  • 14. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 14 / 20 H. HY수열 시간제한 1초 입사 한 지 얼마 안 된 주람이는 팀의 막내로 HY수열에 관한 일을 하고 있다. HY수열은 H수열과 Y수열로 나뉘며 i번째 H수열은 다음과 같이 정의 된다. (3 ≤ i) 1. i이하의 자연수로 만들 수 있는 분수 중 값이 1이하인 분수를 모두 구한다. 2. 분수들 중 기약분수만을 남기고 지운다. 3. 분수들을 오름차순으로 정렬한다. 위와 같은 방법으로 수열을 구하면 3번째 H수열은 {1/3, 1/2, 2/3, 1/1} 이다. 이 때 i번째 Y수열은 i번째 H수열을 바보셈으로 계산하여 구할 수 있다. 바보셈이란 분수 계산 에 사용되는 셈이다. 바보셈은 ∎로 나타내며 다음과 같이 정의된다. 𝑏 𝑎 ∎ 𝑑 𝑐 = 𝑏 + 𝑑 𝑎 + 𝑐 i번째 H수열의 크기가 k라고 할 때 i번째 Y수열의 j번째 항은 다음과 같다. 𝑌𝑖,𝑗 = 𝐻𝑖,𝑗∎ 𝐻𝑖,𝑗+2 ( j ≤ k − 2 ) (𝐻𝑖,𝑗는 i번째 H수열의 j번째 항이고 𝑌𝑖,𝑗는 i번째 Y수열의 j번째 항이다.) 오늘 주람이가 해야 할 일은 𝐹𝑖의 값을 구하는 것이다. 𝐹𝑖 = ∑ 𝐻𝑖,𝑗 𝑘 𝑗=1 − ∑ 𝑌𝑖,𝑗 𝑘 − 2 𝑗=1 일을 열심히 하던 주람이는 이대로 하다간 제시간에 퇴근할 수 없다는 생각이 들었다. 일을 빨리 처리할 수 있도록 𝐹𝑖값을 구하는 프로그램을 만들어주자.
  • 15. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 15 / 20 입력 첫째 줄에 i(3 ≤ I ≤1,000,000,000)의 값이 주어진다. 출력 𝐹𝑖를 기약분수로 나타냈을 때 p/q가 된다. 이 때 p, q를 한 줄에 공백으로 구분하여 출력한다. 예제 입력 예제 출력 3 4 3
  • 16. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 16 / 20 I. 자석 꽂아넣기 시간제한 1초 얼마 전에 나온 문명 VI를 하던 하진이는 보드게임에 흥미를 가지게 되었다. 그중 하나는 하노 이의 탑으로, 기둥이 겨우 세 개 밖에 없어 세상이 망하는 날이 오래 간다는 사실을 깨달은 그는 기둥의 개수를 늘려보고자 했다. 하지만 기둥의 개수를 늘려본 결과 너무나도 쉽게 세상이 멸망 한다는 것을 알았고, 금세 흥미를 잃게 되었다. 얼마 후 다른 조건을 걸어 보기로 한 하진이는 새로운 보드게임을 만들어냈다. 두 공에 적힌 번 호의 합이 완전 제곱수면 인력이 작용해 자석처럼 붙게 되고 그 외에는 엄청난 척력이 작용하여 같이 끼우지 못하게 되는 것이다. 공을 한 번에 하나씩, 번호가 커지는 순서로 기둥에 끼우는 게임을 한다. 즉 1번을 끼우고 나서 2번을 끼우고, 그리고 나서 3번을 끼우고 하는 식으로 공을 기둥에 끼우며, 더 이상 밀어내지 않도록 공을 끼울 수 없게 되면 게임이 끝났다. 게임의 목표는 최대한 많은 개수의 공을 끼우는 것이다. 위에 있는 그림에는 기둥이 네 개인 경우에 최대한 많은 공을 끼운 결과가 나와있다. 여러분은 하진이와 준근이가 하는 이 게임을 준근이를 도와 같이 하게 되었다. 공을 서로 번갈아 가며 끼운다고 할 때, 먼저 시작하는 쪽이 유리한지 불리한지 알게 하기 위해 몇 개까지 끼울 수 있는지 알려 달라는 준근이를 도와 게임에서 이기게 해 주자.
  • 17. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 17 / 20 입력 첫째 줄에 쓸 수 있는 기둥의 개수를 나타내는 정수 N(1 ≤ N ≤ 63)이 입력된다. 출력 기둥에 끼울 수 있는 공의 최대 개수를 나타내는 정수를 출력한다. 끼울 수 있는 공의 개수가 무 한하면 -1을 출력한다. 예제 입력 예제 출력 4 11
  • 18. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 18 / 20 J. 테러를 막아라 시간제한 1초 ALOHA 시의 슈퍼 히어로 윤성은 2일 뒤에 테러리스트들이 시청을 공격할 것이라는 사실을 알게 되었다. 윤성은 첩보를 통해 테러리스트들이 두 개의 도로를 점거해 나가며 시청으로 향할 것을 알았다. 윤성은 테러리스트들이 어느 지점부터 점거를 시작해 나갈 것인지는 알지만 어떤 도로들 을 이용할 것인지는 알지 못한다. 따라서 점거시작 지점부터 시청이 있는 지점까지 두 도로만에 가는 모든 경우의 수에 대해 각각의 대비책을 세우려 한다. ALOHA 시의 시청 주변 지점들은 점거 시작 지점과 시청 지점을 포함해 5개이며 점거 시작 지점 은 1번, 시청 지점은 5번으로 나타낸다. 이 때 윤성이는 도시의 모든 도로상황을 알 필요가 없 다는 것을 알게 되었다. 윤성이는 1번 지점을 시작점으로 갖는 도로들의 정보와 5번 지점을 도 착점으로 갖는 도로들의 정보만 있으면 된다는 것을 알았다. 1번 지점을 시작점으로 갖는 도로들 의 정보와 5번 지점을 도착점으로 갖는 도로들의 정보가 주어졌을 때 윤성이가 세워야 할 대비책 의 개수를 구해보자. (도로는 일방통행인 것들도 있어서 1지점에서 2지점으로 향하는 도로가 있 어도 2지점에서 1지점으로 향하는 도로가 없을 수 있다.) 입력 첫째 줄에는 1번 지점을 시작점으로 갖는 도로의 정보를 나타내는 다섯 개의 정수 A1, A2, … A5 가 주어진다. Ai는 1번 지점을 출발점으로 갖고 i번 지점을 도착점으로 갖는 도로의 가지 수를 의미한다. 둘째 줄에는 5번 지점을 도착점으로 갖는 도로의 정보를 나타내는 다섯 개의 정수 B1, B2, … B5 가 주어진다. Bi는 i번 지점을 출발점으로 갖고 5번 지점을 도착점으로 갖는 도로의 가지 수를 의미한다. 모든 도로의 가지수는 0이상 100 이하의 정수이다. 출력 슈퍼 히어로 윤성이 세워야 하는 대비책의 수를 출력한다. 예제입력 예제출력 0 0 1 0 0 0 0 8 0 0 8
  • 19. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 19 / 20 K. We are in the Hanyang University!!!!! 시간제한 1초 우리는 지금 대한민국 명문 ○○대학교에서 HCPC를 치르고 있다. 세계로 뻗어 나가는 ○○대학교를 위해 ○○을 영어로 표기하려고 한다. ○○을 표기법에 맞추어 영어로 출력하여라. 입력 없다. 출력 공백없이 대문자로 출력한다.
  • 20. 2016 한양대학교 프로그래밍 경시대회(Beginner Division) 페이지 20 / 20 L. K 번째로 큰 수 찾기 시간제한 1초 배열의 크기 N과 정수 K, 배열 A가 입력으로 주어질 때, 배열에서 K번째로 큰 숫자를 구하여 그 값을 출력 하시오. (단, 1 ≤ K ≤ N ≤ 1000 이고, A에는 중복 되는 원소가 없는 것이 보장된다.). 입력 첫번째 줄에 배열의 크기 N과 정수 K가 주어진다. 두번째 줄에는 배열 A의 원소를 나타내는 A[i]가 N개 주어진다. 이 값은 모두 다르다. (단, -1,000,000 ≤ A[i] ≤ 1,000,000) 출력 배열 A에서 K번째로 큰 숫자를 출력하시오 예제 입력 예제 출력 8 2 1 3 4 2 7 5 6 8 7
  • 21. 제 3 회 한양대학교 프로그래밍 경시대회 -Advanced Division- 2016. 11. 12 주최 및 후원 한양대학교 컴퓨터공학부 한양대학교 ACM-ICPC 대표팀 한양대학교 컴퓨터공학부 특성화사업단 한양대학교 컴퓨터공학부 어코드사업단 NAVER D2 NCSOFT 삼성 소프트웨어 멤버십 대회 유의사항 1. 대회 진행시간은 3 시간 입니다. 2. 해결한 문제 수, 푸는데 사용한 시간에 따른 페널티로 순위를 결정합니다. 3. 대회 종료 후, 결과 발표 및 시상이 있을 예정입니다.
  • 22. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 2 / 21 A. 무빙워크 설치할 돈도 없으면 네 실력을 탓해 시간제한 1초 비선실세 윤성이는 평범한 대학생이었던 종현이에게 한양대학교 건물들 사이에 무빙워크를 설치 하여 모든 건물들이 무빙워크로 서로 연결되도록 계획을 짜도록 지시했다. 이때 윤성이는 다음과 같은 조건을 만족하도록 요구사항을 전달했다. 1. 건물 사이에 무빙워크를 설치하여 학교 내의 모든 건물이 서로 연결되도록 하되 설치하는 무빙워크 전체의 개수는 최소가 되어야 한다. 2. 1을 만족하는 경우 중 금으로 만든 무빙워크의 개수를 최대한 늘려야 한다. 3. 2를 만족하는 경우 중 은으로 만든 무빙워크의 개수를 최대한 늘려야 한다. 무빙워크는 기본적으로 양방향 모두 동작하도록 설계된다. 건물들 간에는 무빙워크를 설치할 수 있는 경우도 있고 없는 경우도 있으며 지형에 따라 사용할 수 있는 재료도 정해져 있다고 한다. 그와 관련하여 윤성이는 자료를 종현이에게 넘겨주었으나 종현이는 경시대회 문제를 만드느라 피 곤하므로 여러분이 이를 해결해야 한다. 입력 첫 줄에 한양대학교 내의 건물 개수 n, 설치할 수 있는 무빙워크의 개수 m이 주어진다. (3 ≤ n ≤ 500, 1 ≤ m ≤ 5,000). 그 다음 m개의 줄에 순서대로 a, b, c가 주어지는데 건물 a, b번 사이에 무빙워크를 설치할 수 있다는 뜻이다. a, b는 1이상 n이하이고 서로 같지 않으며 c 는 0일때는 금, 1일때는 은, 2일때는 동으로 만들어야 한다는 뜻이다. a, b, c 묶음은 동일한 값으로 여러번 주어질 수도 있다. 출력 조건1, 2, 3을 모두 만족하며 무빙워크를 설치할 때 금, 은, 동으로 만들 무빙워크의 개수를 각 각 공백으로 구분하여 출력한다. 만약 목록에 있는 무빙워크를 모두 설치해도 n개의 모든 건물들 이 서로 연결되도록 할 수 없다면 -1을 출력한다. 예제 입력 예제 출력 3 4 1 2 0 1 2 2 2 3 1 1 3 2 1 1 0
  • 23. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 3 / 21 B. 7777 시간제한 1초 한양대학교 알고리즘 연구 동아리 ALOHA에는 솔로가 된지 7777일이 되면 마법을 부릴 수 있다 는 전설이 내려져 온다. 재석이는 동아리에 그런 조건을 만족하는 사람들을 조사해 전설을 검증 해보기로 했다. 동아리 회원들의 이름과 마지막 연애 날짜가 주어지면 “특정 날짜”에 솔로가 된지 7777일 이상 경과한 동아리 회원의 이름을 입력 순서대로 출력한다. 단, 마지막 연애 날짜와 “특 정 날짜”가 같은 경우에는 0일이 경과한 것으로 간주한다. 입력 첫 줄에 동아리 회원의 수 N (1 ≤ N ≤1,000)이 주어진다. 두번째 줄에 “특정 날짜”가 yyyy-mm-dd 형식으로 주어진다. 세번째 줄부터 (N+2)째 줄에 걸쳐 각 줄에 공백없이 알파벳으로 구성된 10글자 이하의 동아리원 이름과, 마지막 연애 날짜가 yyyy-mm-dd 포맷으로 공백으로 구분되어 주어진다. 모든 입력은 그레고리력을 사용한 이후인 1582-10-15이후인 날짜 중 3000-12-31 이전의 날짜들 로 구성된다. 또한 “특정 날짜”보다 뒤에 오는 날짜로 마지막 연애 날짜가 주어지지는 않는다. 대부분의 날짜 관련 내장 라이브러리는 1900년 이전의 날짜를 지원하지 않는다는 사실에 유의하 라. 출력 특정 날짜에 솔로가 된지 7777일 이상 경과한 사람의 이름을 입력 순서대로 출력한다. 한 줄에 한 명의 이름만 출력하며, 이름과 이름은 엔터로 구분하시오. 단, 출력할 이름이 하나도 없는 경우에는 “Not Found”를 출력한다. (큰따옴표 제외) 예제 입력 예제 출력 4 2016-11-12 JM 1995-09-27 WE 1994-12-10 KT 2016-11-12 Ammonites 1582-10-15 WE Ammonites
  • 24. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 4 / 21 HINT JM는 7717일, WE는 8008일, KT는 0일 경과하였다. - 윤년에 관한 규칙 서력 기원 연수가 4로 나누어 떨어지는 해는 윤년으로 한다. 이 중에서 100으로 나누어 떨어지는 해는 평년으로 한다. 그 중에 400으로 나누어 떨어지는 해는 윤년으로 둔다. - 각 달의 일수 1월부터 12월까지 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31일, 윤년인 해의 2월은 29일 이다.
  • 25. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 5 / 21 C. 디오니소스의 파티 시간제한 1초 옛날옛적, 신들이 살고 있는 올림푸스에서 술의 신 디오니소스가 성대한 파티를 열었다. 많은 신 들과 영웅들이 그의 파티에 초대되었고, 올림푸스는 그 파티 준비와 기대감으로 한창 부풀어 있 었다. 파티 당일 아침, 초대된 영웅 중 한명인 오르페우스도 기대감에 한껏 들떠 밤을 지새다 자신이 늦잠을 자버렸다는 사실을 깨닫게 되었다. 서둘러 디오니소스의 파티장으로 나섰지만 이미 시간 이 촉박한 상황이므로 오르페우스는 느린 평소 걸음 대신 노래를 부르며 반주에 맞춰 빠르게 걷 기로 결정했다. 현재 파티 시작까지 남은 시간은 T분이고 자신의 집에서 디오니소스의 파티장까 지는 L만큼의 거리가 있다. 오르페우스는 N개의 노래를 연주할 수 있고, 각 노래의 소요 시간은 1분으로 같다. 하지만 템포 가 다르기 때문에 각 노래를 연주하면서 걸을 수 있는 거리는 서로 다르다. 오르페우스는 남은 L 거리를 노래를 연주하면서 빠르게 이동해야 한다. 다만 하나의 노래가 종료되기 전에 파티장에 도착할 경우 파티장의 노래와 겹쳐 흥이 깨져버릴 우려가 있기 때문에 파티장에 도착할 때 연주 중이던 노래는 반드시 종료되어야 한다. 예를 들어 오르페우스가 빠른 노래 : 5 중간 노래 : 2 느린 노래 : 1 의 속도로 걸어갈 수 있고 T가 4이고 L이 13일 경우 빠른 노래를 2번, 중간 노래를 1번, 느린 노래를 1번 연주할 경우 파티장에 4분만에 도착할 수 있으며 T보다 크지 않으므로 지각의 책임 을 피할 수 있다. 반면 빠른 노래를 3번 연주하면 3분만에 15의 거리를 이동할 수 있지만 파티 장에 도착하는 순간 노래가 종료되지 않기 때문에 이 방법은 불가능하다. 또한 T가 3일 때 최선 의 도착소요시간이 4분이면 지각의 책임을 져야 하며, 이 경우 파티장의 흥이 깨지게 된다. 오르페우스를 도와 L, T, N과 각 노래의 이동거리가 주어졌을 때 오르페우스가 도착할 수 있는 최선의 소요시간 B을 구하는 프로그램을 작성하시오.
  • 26. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 6 / 21 입력 첫째 줄에 디오니소스의 파티장까지의 거리 L, 남은 시간 T, 연주할 수 있는 노래의 곡 수 N이 주어진다.(1 ≤ L ≤ 1,000,000, 1 ≤ T ≤ 1,000,000, 1 ≤ N ≤ 10) 둘째 줄부터 N+1째 줄까지 각 곡의 이동거리가 한 줄에 하나씩 주어진다. 각 곡의 이동거리 값 은 1보다 크거나 같고 1,000보다 작거나 같은 자연수이다. 출력 해당 케이스에서 디오니소스의 파티장까지 걸리는 최적 소요시간이 T보다 작거나 같다면 해당 소 요시간 B를 첫째 줄에 출력한다. 만약 디오니소스의 파티장까지 T분 이내에 도착할 수 있는 방 법이 없거나, 아예 파티장에 도착할 수 있는 방법이 존재하지 않는다면 “I sincerely apologize for being late”를 출력한다. 첫 글자는 대문자이고 대소문자를 구분하며 띄어쓰기 의 위치를 주의한다. 예제 입력 예제 출력 13 4 3 5 2 1 4
  • 27. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 7 / 21 D. 약물 회수하기 시간제한 1초 각 마을에 금지 약물이 최대 1개씩 있다는 첩보를 입수했다. 약물 처리 특수 부대 알로하 조직원 은 약물을 회수하려고 특수 용기를 준비했다. 약물마다 등급이 있는데 같은 등급의 약물을 넣거 나 높은 등급의 약물을 낮은 등급의 약물보다 먼저 용기에 넣을 경우 폭발의 위험이 있기 때문에 주의해야 한다. 게다가 아무리 서로 다른 등급의 약물이라도 연속적인 등급을 가진 약물을 3연속 으로 담는 경우도 위험하다. 예를 들어 x등급의 약물을 이미 페트병에 담았다면 x이하의 등급의 약물은 더 이상 담을 수 없고 x등급, x+1등급의 약물을 담은 적이 있다면 x+2등급의 약물은 담 을 수 없다. 아래의 예시는 마을을 좌표로 나타내어 표현한 예시이다. L1, L2, L3, L4는 각각 1 ~ 4등급의 약물이고 검은색은 이동할 수 없는 지역이다. 각 모서리 부분은 좌표까지 표기되어 있다. (5, 1) L3 L1 (5, 5) L2 L3 처음 출발 위치 (1, 1) L4 (1, 5) L4 예를 들어, (5, 4)의 L1약물을 회수하고 (5,5)의 L2약물을 회수하면 L3약물은 연속적인 등급의 약물이 되어 담지 못하고 L4약물을 담으러 가야 해서 14칸을 이동하여 3개의 약물을 가지고 출 발위치로 돌아올 수 있다. 반면 (5, 4)의 L1약물을 담고 (4, 4)의 L3약물을 담은 후 (1, 2)의 L4약물을 담고 처음 위치로 돌아오면 3개의 약물을 회수하고 12번만 칸을 이동하여 처음 위치로 돌아올 수 있다. 위 예시에서 이 경우보다 약물을 많이 회수하거나 같은 개수의 약물을 회수해 더 짧은 이동거리 로 돌아오는 경우는 없다. 같은 곳을 여러 번 지나가도 되며 약물이 있는 칸에 도착해도 원하지 않으면 약물을 회수하지 않아도 된다. 또한, 이동 중에 출발 위치에 중간에 도착해도 약물을 더 회수할 수 있다면 멈추지 않아도 되며 마을 밖으로는 이동할 수 없다. 마을의 범위는 항상 x, y 좌표값이 모두 1이상 100이하인 위치들이며 이동은 상하좌우만 허용되고 대각선은 허용되지 않 는다. 처음 출발 위치와 약물의 위치 및 이동 불가지역의 위치가 주어질 때 최대한 많은 약물을 회수하 고 출발점으로 돌아오고자 한다. 최대로 회수한 약물의 개수와 그때 이동한 최단거리를 구하여 라.
  • 28. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 8 / 21 입력 첫째 줄에 약물 또는 이동 불가지역의 개수 N과 처음 위치 (a, b)가 공백으로 구분되어 주어진 다. (1 ≤ N ≤ 100, 1 ≤ a ≤ 100, 1 ≤ b ≤ 100) 그 다음 줄부터 차례로 약물의 위치 (x, y)와 등급 R이 주어진다. (1 ≤ x ≤ 100, 1 ≤ y ≤ 100, 0 ≤ R ≤ N). 등급이 0인 경우 약물의 위치가 아니라 이동할 수 없는 칸을 나타낸다. 모든 약물 의 위치와 출발 위치 및 이동 불가지역은 서로 중복되지 않음이 보장된다. 출력 가장 많이 회수할 수 있는 약물의 개수와 그때의 이동거리의 최소값을 공백으로 구분하여 출력한 다. 만약 회수할 수 있는 약물이 하나도 없을 경우 가만히 있는 것이 가장 좋은 경우이다. 예제 입력 예제 출력 11 3 3 5 1 3 1 2 4 3 2 0 4 3 0 1 4 0 2 4 0 4 4 3 5 4 1 1 5 4 2 5 0 5 5 2 3 12
  • 29. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 9 / 21 E. 369CLAPGAME 시간제한 2초 경준이와 기원이가 369게임을 하려고 한다. 369게임을 하는 도중 둘 다 너무 잘한다는 것을 깨 닫고 규칙을 바꾸어 369CLAP게임을 만들었다. 게임 룰은 다음과 같다. A. 게임을 시작하기 전에 경준이와 기원이는 각자 2에서부터 36까지 적힌 카드 중 한 장 을 뽑는다. 이때 뽑은 카드의 숫자가 더 작은 사람부터 시작하며 만약 같은 숫자라면 기원이의 넓은 아량으로 경준이가 먼저 시작한다. B. 1부터 차례대로 숫자를 서로 번갈아 가면서 말한다. 이때 숫자를 자신이 뽑은 카드의 숫자 진법으로 변환해서 말한다. 11진법 이상 변환 시 10은 A, 11은 B, 12는 C, …, 35는 Z로 변환한다. C. 숫자(진법 변환 후)에 3, 6, 9, C, L, A, P가 있다면 숫자를 말하는 대신 박수를 쳐 야 한다. 만약 3, 6, 9, C, L, A, P가 여러 개 있다면 그 개수만큼 박수를 쳐야 한 다. 심판인 기택이는 안타깝게도 머리가 좋지 못하여 진법변환을 할 수가 없다. 기택이를 위해서 K 번째 순서에 무엇을 말해야 할지 질문하면 답을 알려주는 프로그램을 만들어주자. 입력 첫째 줄에 자연수 N, P, Q가 주어진다. (1 < N < 1,000, 2 ≤ P, Q ≤ 36) N은 기택이가 프로 그램에게 묻는 질문의 개수이고 P는 경준이가 뽑은 카드에 적힌 숫자, Q는 기원이가 뽑은 카드 에 적힌 숫자이다. 그리고 다음 N줄에 걸쳐 K(1 ≤ K ≤ 100,000,000)가 주어진다. 출력 첫째 줄부터 N째 줄에 걸쳐 구한 답을 출력한다. 박수는 “CLAP” 으로 출력한다. 예제 입력 예제 출력 5 8 16 5 14 15 27 42 5 E 17 CLAPCLAP CLAP
  • 30. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 10 / 21 F. 블록 쌓기 시간제한 1초 블록 쌓기 게임은 주어진 블록을 사용해서 가장 높이 쌓은 사람이 이기는 게임이다. 블록은 왼쪽 [그림 1]과 같은 사다리꼴 모양이며 [그림 2] 처럼 블록의 아래 면과 윗면의 길이가 일치해야 위에 쌓을 수 있다는 규칙이 있다. 단 가장 아래 블록은 어떤 블록이든 선택될 수 있다. 사다리꼴 블록의 윗면 길이(a), 아래 면의 길이(b), 높이(h)가 주어진다. 이때 주어진 블록을 한 번씩만 사용해서 쌓을 수 있는 블록의 최대 높이를 구하라. 입력 첫 번째 줄에 블록의 개수 N (1 ≤ N ≤ 10)가 주어진다. 두 번째 줄부터 N+1 번째 줄까지 각 줄에 세 개의 양의 정수가 주어진다. 각각 사다리꼴 블록 윗면의 길이 a (1 ≤ a ≤ 100), 아래 면의 길이 b (1 ≤ b ≤ 100), 높이 h (1 ≤ h ≤ 100)를 의미한다. 출력 주어진 블록을 한 번씩만 사용해서 쌓을 수 있는 최대 높이를 출력한다 예제 입력 예제 출력 4 3 2 2 2 5 3 5 4 2 4 4 2 9
  • 31. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 11 / 21 G. 그녀를 찾아서 시간제한 1초 알파고 나라의 국왕에게는 아름다운 공주가 있다. 공주가 결혼할 나이가 되자 국왕은 성에 다음 과 같은 공고문을 냈다. 알파고 나라에서 용병생활을 하던 채홍이는 이 공고문을 보고 공주와 결혼을 한다면 떠돌이 용병 생활도 청산할 수 있고 아름다운 공주도 함께 얻을 수 있을 것이라고 생각했다. 채홍이는 공고문 의 뒷면에 있는 장소로 가서 도전자 등록을 하였다. 공고문에 적힌 날짜가 되자, 채홍이는 사람들이 모여있는 왕궁으로 갔다. 국왕은 지혜와 용기는 함께해야 하는 것이라며 테스트는 단 한가지라고 하였다. 테스트는 다음과 같은 방식으로 이루어 진다.
  • 32. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 12 / 21 테스트를 하는 장소는 <그림 1>과 같이 N x M의 방으로 이루어져 있다. 각 방에는 몬스터가 있 으며 숫자는 그 몬스터의 체력을 나타낸다. 방을 통과하려면 몬스터를 잡아야 하는데 몬스터를 잡는데 걸리는 시간은 체력 1당 1초가 걸린다. 방을 이동할 때에는 방향을 전환하지 않으면 시 간이 걸리지 않지만(0초) 방향을 전환하는 데에는 1초의 시간이 걸린다. 예를 들어 (1, 1)에서 (1, 2), (2, 2), (2, 3)으로 가는것과 (2, 1), (2, 2), (2, 3)으로 가 는 것은 잡아야 할 몬스터의 체력이 7, 9, 3, 2로 모두 같지만 전자의 경우에는 방향전환을 2번 해야해서 23의 시간이 들지만 후자의 경우에는 방향전환을 1번하기 때문에 22의 시간이 든다. 시작점인 (1, 1)에서 아래(2, 1)로 가거나 오른쪽(1, 2)로 가는 것은 방향전환을 했다고 생각 하지 않는다. 테스트는 왼쪽 상단 (1, 1)에서 출발하여 우측 하단 (N, M)에 도달하면 종료된다. 시작점과 도 착점의 몬스터도 잡아야 한다. 국왕은 이 테스트를 제일 먼저 통과하는 사람에게 공주와 결혼할 수 있는 기회를 주겠다고 했다. 채홍이를 도와 출발지에서 도착지까지 걸리는 가장 짧은 시간을 구해보자. 입력 입력의 첫 줄에는 테스트 장소의 크기를 나타내는 N과 M (1 ≤ N, M ≤ 500)이 주어진다. N은 세 로길이를 나타내고 M은 가로길이를 나타낸다. 다음 N개의 줄에는 각 방의 몬스터의 체력을 나타 내는 x가 M개 주어진다. 몬스터의 체력은 10을 넘지 않는 자연수이다. (1 ≤ x ≤ 10) 출력 채홍이가 테스트를 끝낼 수 있는 가장 짧은 시간을 출력하라. 예제 입력 예제 출력 3 5 7 9 4 5 5 9 3 2 2 2 3 8 10 5 6 33
  • 33. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 13 / 21 H. HY수열 시간제한 1초 입사 한 지 얼마 안 된 주람이는 팀의 막내로 HY수열에 관한 일을 하고 있다. HY수열은 H수열과 Y수열로 나뉘며 i번째 H수열은 다음과 같이 정의 된다. (3 ≤ i) 1. i이하의 자연수로 만들 수 있는 분수 중 값이 1이하인 분수를 모두 구한다. 2. 분수들 중 기약분수만을 남기고 지운다. 3. 분수들을 오름차순으로 정렬한다. 위와 같은 방법으로 수열을 구하면 3번째 H수열은 {1/3, 1/2, 2/3, 1/1} 이다. 이 때 i번째 Y수열은 i번째 H수열을 바보셈으로 계산하여 구할 수 있다. 바보셈이란 분수 계산 에 사용되는 셈이다. 바보셈은 ∎로 나타내며 다음과 같이 정의된다. 𝑏 𝑎 ∎ 𝑑 𝑐 = 𝑏 + 𝑑 𝑎 + 𝑐 i번째 H수열의 크기가 k라고 할 때 i번째 Y수열의 j번째 항은 다음과 같다. 𝑌𝑖,𝑗 = 𝐻𝑖,𝑗∎ 𝐻𝑖,𝑗+2 ( j ≤ k − 2 ) (𝐻𝑖,𝑗는 i번째 H수열의 j번째 항이고 𝑌𝑖,𝑗는 i번째 Y수열의 j번째 항이다.) 오늘 주람이가 해야 할 일은 𝐹𝑖의 값을 구하는 것이다. 𝐹𝑖 = ∑ 𝐻𝑖,𝑗 𝑘 𝑗=1 − ∑ 𝑌𝑖,𝑗 𝑘 − 2 𝑗=1 일을 열심히 하던 주람이는 이대로 하다간 제시간에 퇴근할 수 없다는 생각이 들었다. 일을 빨리 처리할 수 있도록 𝐹𝑖값을 구하는 프로그램을 만들어주자.
  • 34. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 14 / 21 입력 첫째 줄에 i(3 ≤ I ≤1,000,000,000)의 값이 주어진다. 출력 𝐹𝑖를 기약분수로 나타냈을 때 p/q가 된다. 이 때 p, q를 한 줄에 공백으로 구분하여 출력한다. 예제 입력 예제 출력 3 4 3
  • 35. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 15 / 21 I. 보고서 검사 시간제한 1초 이번에 새로 들어온 조교가 수업을 맡게 되었다. 수업을 맡은 이 조교는 학생들에게 과제를 내주 었는데, 과제를 베끼는 학생들이 있어서 과제를 엄격하게 검사하기로 했다. 조교가 보고서를 검 사하는 과정은 다음과 같다. 1. 학생들에게 받은 보고서가 양식에 잘 맞는지 확인한다. (글자수 검사 등) 2. 학생들에게 받은 보고서를 모두 보면서 대필 검사와 표절 검사를 한다. 3. 대필 검사와 표절 검사에 걸린 보고서를 제외한 나머지 보고서를 확인하여 주제에 맞게 썼는지 확인한다. 4. 주제에 맞게 잘 썼는지 검사하고, 조교의 판단 하에 적절한지를 점수로 메긴다. 조교는 위와 같은 검사를 하던 중, 표절 검사를 대신 수행시켜주는 프로그램이 필요하다고 생각 하였다. 하지만 표절 검사기를 만드는 것이 매우 어렵기 때문에 간단한 표절검사기를 만들기로 하였다. 만들 표절 검사기는 다음과 같은 기능을 수행한다. 1. 각 보고서 내용에 포함되는 문자들이 몇 번 출현하였는지 센다. 2. 각 보고서에 출현된 문자들의 개수가 같으면 같은 보고서라고 판단하고, 아니면 표절하 지 않은 보고서라고 판단한다. 조교를 위해 우리가 해야할 일은 간단한 표절 검사기를 만들기 위해 각 보고서 내용에 포함되는 문자들이 몇 번 출현하였는지 숫자를 세는 프로그램을 작성해야 한다. 입력 첫 줄에 테스트케이스의 개수 T가 주어진다. 각 테스트케이스의 첫째 줄에는 보고서 내용의 길이 N (1≤N≤100,000)이 주어진다. 그 다음줄에는 보고서의 내용이 주어진다. 단, 보고서의 내용은 영소문자(a-z), 영대문자(A-Z), 숫자(0-9)로만 이루어져 있다. 출력 각 테스트케이스에 대하여 각각의 라인에 어떤 문자들이 몇 번 출현하였는지 개수를 공백으로 구 분하여 출력한다. 단, 하나도 출현이 되지 않은 문자들은 제외하며, 각 문자들을 사전순으로 출 력한다.
  • 36. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 16 / 21 예제 입력 예제 출력 2 6 aaabbb 11 10AAbbBC123 a 3 b 3 0 1 1 2 2 1 3 1 A 2 B 1 C 1 b 2
  • 37. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 17 / 21 J. 자석 꽂아넣기 시간제한 1초 얼마 전에 나온 문명 VI를 하던 하진이는 보드게임에 흥미를 가지게 되었다. 그중 하나는 하노 이의 탑으로, 기둥이 겨우 세 개 밖에 없어 세상이 망하는 날이 오래 간다는 사실을 깨달은 그는 기둥의 개수를 늘려보고자 했다. 하지만 기둥의 개수를 늘려본 결과 너무나도 쉽게 세상이 멸망 한다는 것을 알았고, 금세 흥미를 잃게 되었다. 얼마 후 다른 조건을 걸어 보기로 한 하진이는 새로운 보드게임을 만들어냈다. 두 공에 적힌 번 호의 합이 완전 제곱수면 인력이 작용해 자석처럼 붙게 되고 그 외에는 엄청난 척력이 작용하여 같이 끼우지 못하게 되는 것이다. 공을 한 번에 하나씩, 번호가 커지는 순서로 기둥에 끼우는 게임을 한다. 즉 1번을 끼우고 나서 2번을 끼우고, 그리고 나서 3번을 끼우고 하는 식으로 공을 기둥에 끼우며, 더 이상 밀어내지 않도록 공을 끼울 수 없게 되면 게임이 끝났다. 게임의 목표는 최대한 많은 개수의 공을 끼우는 것이다. 위에 있는 그림에는 기둥이 네 개인 경우에 최대한 많은 공을 끼운 결과가 나와있다. 여러분은 하진이와 준근이가 하는 이 게임을 준근이를 도와 같이 하게 되었다. 공을 서로 번갈아 가며 끼운다고 할 때, 먼저 시작하는 쪽이 유리한지 불리한지 알게 하기 위해 몇 개까지 끼울 수 있는지 알려 달라는 준근이를 도와 게임에서 이기게 해 주자.
  • 38. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 18 / 21 입력 첫째 줄에 쓸 수 있는 기둥의 개수를 나타내는 정수 N(1 ≤ N ≤ 63)이 입력된다. 출력 기둥에 끼울 수 있는 공의 최대 개수를 나타내는 정수를 출력한다. 끼울 수 있는 공의 개수가 무 한하면 -1을 출력한다. 예제 입력 예제 출력 4 11
  • 39. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 19 / 21 K. 비숍 배치하기 시간제한 2초 체스에는 대각선 방향으로 움직일 수 있는 비숍이 있다. <그림 1>과 같은 정사각형 체스 판 위 에 B라고 표시된 곳에 비숍은 대각선 방향으로 움직여 O로 표시된 칸에 있는 다른 말을 잡을 수 있다. 그런데 체스판 위에는 비숍 뿐만 아니라 룩도 있다. <그림 2>와 같은 정사각형 체스 판 위에 R 이라고 표시된 곳에 룩은 상하좌우로 움직여 O로 표시된 칸에 있는 다른 말을 잡을 수 있다. 또한 체스판 위에는 비숍과 룩이 지나갈 수 없는 장애물이 놓일 수 있다. 예를 들어 <그림 3>과 같이 체스판 중앙에 장애물이 있으면 비숍은 오른쪽 아래 대각선 방향으로는 움직일 수 없고 룩은 왼쪽 방향으로 움직일 수 없다.
  • 40. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 20 / 21 체스판 위에 룩과 장애물이 이미 있다고 할 때 비숍과 룩이 서로를 잡지 못하게 하고, 비숍과 비 숍이 서로를 잡지 못하게 하려 할 때, 비숍을 놓을 수 있는 최대 개수를 구하는 프로그램을 작성 하시오. 단, 룩과 룩은 서로가 서로를 잡을 수 있는 위치에 주어진다고 해도 서로 공격하지 않는 다. 입력 첫째 줄에 정사각형 체스판의 크기 N(1 ≤ N ≤ 200)이 주어진다. 둘째 줄부터 아래의 예와 같이 체스판의 상태가 주어진다. ‘0’은 빈 칸을 의미하고, ‘1’은 그 칸에 룩이 있음을 의미한다. ‘2’ 는 그 칸에 장애물이 있음을 의미한다. 출력 주어진 체스판에 비숍을 배치할 때, 최대 몇 개를 배치할 수 있는지 출력한다 예제 입력 예제 출력 5 00000 00000 00000 00000 00000 8
  • 41. 2016 한양대학교 프로그래밍 경시대회(Advanced Division) 페이지 21 / 21 L. 크리스마스 전구 시간제한 2초, 메모리 제한 64MB 석기와 수진이는 다가올 크리스마스를 맞아 학생회실에 전구를 설치하려고 한다. 전구의 종류에 는 A~Z 타입이 있는데, 석기와 수진이의 생각이 서로 달라 싸우기 시작했다. 이를 보던 수현이 는 ‘석기가 설치하고자 하는 전구 순열’과 ‘수진이가 설치하고자 하는 전구 순열’의 ‘공통 부분 순열’의 길이가 최대가 되는 순열을 제시하여 싸움을 중재하기로 했다. 부분 순열이란, 원래 수 열의 일부 항을 원래 순서대로 나열해서 얻을 수 있는 수열을 의미하며, 공통 부분 순열이란 주 어진 수열들 모두에 해당하는 부분 순열을 의미한다. 입력 첫째 줄에 ‘석기가 설치하고자 하는 전구 순열’, 둘째 줄에 ‘수진이가 설치하고자 하는 전구 순 열’이 문자열로 입력된다. 각 순열들은 로마자 대문자로만 공백없이 구성되어 입력된다. 각 순 열들은 로마자 대문자로만 공백없이 구성되며 각각 순열의 길이는 1이상 10,000 이하이다. 출력 수진이가 제시 해야 할 순열을 출력한다. 단, 여러 가지가 가능할 경우 그 중 아무거나 하나만 출력한다. 공통 부분 순열의 길이가 0일 경우, 따옴표 없이 “Not Match” 를 출력한다. 예제 입력 예제 출력 GEUNHYE SUNSIL UN