2. 2
문제 안내
1. 문제 관련
A. 문제의 인쇄상태에 문제가 있는 경우 스태프에게 문의해주세요
B. 문제의 설명을 정확히 읽어주세요
C. 문제속의 인물과 이야기는 허구입니다
2. 질문 관련
A. 문제 자체에 직접적으로 관련된 내용만 질문하실 수 있습니다
B. 시스템과 관련된 질문은 스태프를 통해주세요
C. 문제 설명에 이미 명시된 내용에 대해서는 답변을 해드리지 않습니다
D. 일부 중요한 질문은 전체 공개로 전환될 수 있습니다.
3. 입력 관련
A. 입력은 stdin(C/C++), System.in(Java)를 통해서 받습니다
B. 모든 입력은 주어진 양식과 조건에 맞추어 주어집니다
C. 양식과 조건을 벗어난 예외적인 데이터는 입력되지 않습니다
4. 출력 관련
A. 출력은 stdout(C/C++), System.out(Java)를 통해서 합니다
B. 출력 양식을 필히 확인하시고 정확히 출력해주세요
C. 지시하지 않은 내용을 출력하면 오답으로 처리될 수 있습니다
5. 제한 관련
A. Java 는 언어적 특성상 메모리와 시간을 조금 더 제공합니다
3. 3
A. 끝말잇기
문제 설명
끝말잇기는 이 전 단어의 마지막 글자로 시작하는 새로운 단어를 말하며 이어가는 게임이다. 각 사람은
자신 바로 이전의 사람이 말한 단어의 끝 글자로 시작하는 단어를 말해야 한다. 물론 존재하지 않는 터무니
없는 단어는 사용할 수 없으므로 이 게임은 전적으로 어휘력이 풍부한 사람이 유리하다.
연애에 서툰 복학생인 우태는 신입생과 친해지기 위하여 MT 에 가기에 앞서 끝말잇기 게임을 준비했다.
단, 몇몇 신입생에게 점수를 따고 싶은 우태는 자신이 원하는 대로 게임이 흘러갈 수 있도록 몇 가지 아래와
같은 규칙을 정했다.
• 이 게임에서 사용되는 모든 단어는 영어이다.
• 사전의 모든 단어는 항상 사전순으로 정렬되어있다.
• 게임에 참가하는 모든 사람은 우태가 만든 끝말잇기 사전에 적힌 단어들 만을 사용할 수 있다.
• 우태가 만든 사전에 없는 영단어는 사용할 수 없으며, 사전에 있는 단어는 실존하지 않는 단어여도
상관없다.
• 한 사람이 단어를 말하면, 다음 사람이 말하는 단어의 첫 글자는 이 전 사람이 말한 단어의 마지막
글자와 같아야 한다.
MT 에 가기 전에 자신이 원하는 대로 끝말잇기 사전을 만들고, 미리 모든 단어를 외워둔 우태는 기대에
가득 차 있었다. 하지만 MT 에 가지 않기로 결정한 모태솔로 재현이는 연서복 우태가 자신처럼 신입생과
친분이 없기를 바랬다. 그래서 재현이는 우태가 동방에 둔 사전을 몰래 훔쳐서 사전에 적힌 단어를
조작해버렸다!
재현이는 우태의 사전을 훔쳐서 각 단어를 구성하는 알파벳을 사전순으로 정렬해버렸다! 즉, 예를 들어
우태의 사전에 lovelyz 라는 단어가 있었다면 재현이가 조작한 사전에는 ellovyz 로 바뀌어 있게 된다.
원본 사전 조작된 사전
apple
banana
eat
kiwi
trick
aaabnn
aelpp
aet
cikrt
iikw
<재현이가 사전을 조작하는 예시>
위의 예시에서 원본 사전의 단어로는 banana-apple-eat-trick-kiwi 순서로 모든 단어를 한번씩만
사용하여 게임을 끝낼 수 있다. 이런 경우를 우태는 성공적 게임이라고 한다.
MT 에 도착해서 사전이 조작되었다는 사실을 알게 된 우태는 이미 게임의 규칙을 후배들에게
설명해버려서 조작된 사전을 가지고 게임을 진행하는 수 밖에 없었다. 그래도 희망을 버리지 않은 우태는
4. 4
당신에게 조작된 사전을 가지고도 성공적 게임이 가능한 지 확인해 달라는 부탁을 했다. 불쌍한 연서복
우태를 도와주자.
입력형식
첫 줄에 사전에 적힌 단어의 개수를 나타내는 자연수 N 이 주어진다. N 은 2 와 10 사이의 정수이다.
그 후 N 줄에 걸쳐서 각 줄에 하나씩 조작 된 사전에 존재하는 단어들이 사전순으로 정렬된 순서로
주어진다. 각 단어의 길이는 1 글자에서 10 글자 사이다.
모든 입력은 소문자로 주어진다.
출력형식
조작된 사전에 존재하는 단어들을 모두 한 번씩만 사용하여 정확히 N 번만에 게임이 끝나는 경우가
가능하다면 “YES”를 출력한다. 그렇지 않다면 “NO”를 출력한다.
예제 데이터 1
입력 출력
5
aaabnn
alpp
aet
cikrt
iikw
NO
예제 데이터 2
입력 출력
9
abblosuy
aeij
eik
einy
ellovyz
gjnsuu
ijmu
ijn
ijsu
NO
예제 데이터 3
입력 출력
3
aaabcddef
fghhhhh
hijjjjjklm
YES
5. 5
B. 진격의 거인
문제 설명
사과를 좋아하는 재현이는 위에서 봤을 때 원형인 평평한 도시에 살고 있다. 재현이네 도시
사람들은 집의 위치를 두 가지 방식으로 나타내는데, 첫 번째 방식은 도시의 중심을 원점으로 하여
(𝑥, 𝑦)의 좌표 형식으로 나타내는 것이고, 두 번째 방식은 도시의 중심(원점)으로부터의 거리 𝑟과
동쪽으로 향하는 축(x 축 양의 방향)을 기준으로부터 반시계 방향으로 보았을 때 이루는 각도 θ에
대하여 (𝑟, 𝜃)로 나타내는 것이다.
얼마 전, 평화롭던 재현이네 마을에 거인들이 몰려와 마을의 동쪽과의 각도가 θ)인 선을
기준으로 시계 반대방향으로 각도 θ*만큼의 부채꼴 영역을 쑥대밭으로 만들어 버렸다. 그 곳에
있던 집들이 무너졌음은 물론, 그 영역을 지나갈 수 조차 없게 되었다.
<재현이의 도시에서 파괴된 (회색)영역>
재현이는 거인들의 마을의 일부를 파괴한 영향으로 집들 사이를 오가는데에 불편함이 있을
것이라 예상하였다. 재현이는 피해의 규모를 예측하기 위하여 당신에게 도움을 청했다. 마을에
존재하는 각 집들의 위치와 거인에 의해 파괴된 영역을 이루는 각도가 주어질 때, 남아있는 두 집
사이의 최단거리 들 중 최댓값을 구하시오.
입력형식
첫 줄에 재현이네 도시에 존재하는 집의 수 N 이 주어진다. N 은 1 과 4,000 사이의 정수이다.
이후 N 줄에 걸쳐서 한 줄에 하나씩 재현이네 도시에 존재하는 집들의 위치가 좌표 형식으로
주어진다. 재현이네 도시에 존재하는 모든 집들의 좌표는 모두 절대값이 10,000 이하인
정수이다.
마지막 줄에는 θ)와 θ*가 공백을 사이에두고 입력된다. 두 각도는 0 과 360 사이의 정수이다.
출력형식
파괴되지 않은 두 집 사이의 최단거리 중 최댓값을 출력한다. 출력된 값과 답안의 값이 10-.
이하의
상대오차 혹은 절대오차를 가지는 경우 정답으로 인정한다.
6. 6
예제 데이터 1
입력 출력
8
-4 -10-4 8
1 -9
6 -3
6 -9
-7 -5
-4 4
-7 -1
283 60
18.000
7. 7
C. Candy
문제 설명
영희는 지난 주에 철수의 생일 선물로 서로 다른 맛의 사탕 N 개를 준비했다. 사탕은 맛에 따라
1 번부터 𝑁번 까지의 사탕으로 분류된다. 영희는 철수에게 주기 위하여 사탕들을 모두 상자에
담아 정성스럽게 포장하였다.
철수의 생일 날, 영희는 준비해두었던 사탕 꾸러미를 철수에게 줬다. 그런데 철수는 꾸러미에서
이상한 점을 발견했다. 몇 개의 사탕이 이미 포장이 뜯어져 있었다! 철수는 영희에게 물어 원래
들어있던 사탕의 개수는 𝑁개 라는 사실을 알게되었다. 사탕은 하나도 사라지지 않았을 수 도있고,
전부다 사라졌을 수도 있다.
철수는 𝐾(1 ≤ 𝐾 ≤ 𝑁)개의 사탕을 선물 받으면 총 23
만큼의 만족도를 얻는다. 예를 들어서
철수가 1, 3, 4 번 사탕을 선물 받았다면, 8 의 만족도를 느끼게 된다. 단, 철수가 사탕을 하나도 못
받는 경우에는 철수는 0 의 만족도를 느끼게 된다.
이 때, 철수가 사탕 꾸러미를 통해 사탕들을 얻을 수 있는 모든 경우의 수에 대하여 각 경우에
얻을 수 있는 만족도의 합은 얼마일까? 철수의 궁금증을 풀어주기 위하여 이를 계산해주자.
입력 형식
입력의 첫 줄에 서로 다른 사탕의 개수를 나타내는 정수 𝑁이 주어진다. N 은 2 와 104
사이의
정수이다.
출력 형식
첫 줄에 철수가 사탕을 받을 수 있는 모든 경우의 수에 대해 만족도들의 합을 1,000,000,007 로
나눈 나머지를 출력한다.
예제 데이터 1
입력 출력
2 8
- 1 번 사탕만 받은 경우 : 2
- 2 번 사탕만 받은 경우 : 2
- 1 번과 2 번 사탕을 받은 경우 : 4
- 아무 사탕도 받지 못한 경우 : 0
8. 8
D. InterGrid
문제 설명
인류가 살고 있는 우주와는 평행한 또 하나의 우주는 2 차원으로 이루어져 있다. 먼 미래에
인류는 3 차원에 살고있는 스스로와 인류가 만든 물질의 차원을 축소할 수 있는 방법을
찾아내기에 이르렀고, 아울러 평행하는 우주와 우주 사이를 이동할 수 있게 되었다.
2 차원 평행 우주를 여행하는 임무를 맡은 shake 호는 해당 우주의 지도를 받았다. 그 지도에서
모든 위치는 제 1 사분면에 해당하는 영역의 좌표로 표시한다. 즉, 가장 왼쪽 아래의 지점은 (0,
0)으로 표현하며 오른쪽이나 위로 갈수록 각 축의 좌표가 증가하게 된다.
<2 차원 우주의 지도 예시>
shake 호가 2 차원 우주에서 각 지점을 이동할 때에는 두 지점 사이의 멘하탄 거리만큼의
에너지를 사용하게 된다.
두 점 A(𝑥6, 𝑦6)와 𝐵(𝑥8, 𝑦8)사이의 멘하탄 거리 𝐷 = 𝑥6 − 𝑥8 + 𝑦6 − 𝑦8 이다.
하지만 이 2 차원 우주에는 몇 개의 단방향 웜홀이 존재하는데, 웜 홀을 이용하면 웜 홀의
출발점에서 도착점까지 0 의 에너지를 사용하여 도달할 수 있다. 물론 웜 홀의 출발점에
도달하더라도 무조건 웜 홀을 사용하지는 않아도 된다.
shake 호의 현재 위치 A(𝑥6, 𝑦6)와 도달하고자 하는 목적지의 좌표 𝐵(𝑥8, 𝑦8)가 주어질 때, 해당
위치로 이동할 때 사용해야할 최소의 에너지 사용량을 계산해보자.
9. 9
입력 형식
첫 줄에는 𝑥6, 𝑦6, 𝑥8, 𝑦8와 2 차원 우주에 존재하는 웜 홀의 개수를 나타내는 정수 N이 주어진다.
N은 0 과 5,000 사이의 정수이다.
그 후 N 줄에 걸쳐서 한 줄에 하나씩 웜홀의 출발점 S 와 도착점 F 의 좌표 𝑥?, 𝑦?, 𝑥@, 𝑦@가
주어진다.
2 차원 우주의 모든 좌표는 0 과 1,000,000 사이의 정수이다.
출력 형식
첫 줄에 shake 호가 A 지점에서 B 지점으로 이동하기 위해 사용해야 할 최소한의 에너지를 정수
형식으로 출력한다.
예제 데이터 1
입력 출력
3 17 7 6 6
9 13 6 17
5 15 6 10
2 19 8 19
2 4 1 18
10 4 3 2
8 16 1 7
9
예제 데이터 2
입력 출력
0 0 1 1 0 2
10. 10
E. Three-Tree
문제 설명
정점의 개수가 N 인 트리가 있다. 트리의 각 정점의 번호는 1 부터 N 사이의 서로 다른 정수이다.
한 트리에 존재하는 길이가 3 인 단순 경로의 수를 S 라 하자.
<길이가 3 인 단순 경로가 두 개 존재하는 트리 예시>
예를 들어서, 위의 그림처럼 트리가 있을 경우 길이가 3 인 단순 경로는 [1, 2, 3, 4], [5,2,3,4]로
두 개가 존재한다. 트리에서 단순 경로의 수를 세는 것은 쉬운 문제이다.
그렇다면 트리에 존재하는 단순 경로의 수 S 가 주어질 때에, 실제로 S 개의 길이 3 짜리 단순
경로를 가지는 트리를 복원해보자. 가능한 트리의 종류가 여러가지 인 경우 그 중 아무것이나
출력한다. 단, 트리를 이루는 정점의 개수는 500 개 이하여야 한다.
입력 형식
첫 줄에 문제에서 요구하는 길이가 3 인 단순 경로의 수 S 가 주어진다. S 는 1 과 10,000 사이의
정수이다.
출력 형식
출력의 첫 줄에는 정점의 개수 N 을 출력한다. N 은 500 이하의 자연수여야 한다.
그 후 (N-1)개의 줄에 걸쳐서, 한 줄에 하나의 간선을 이루는 두 정점의 번호를 출력한다.
예제 데이터 1
입력 출력
2 5
1 2
2 3
3 4
2 5
11. 11
F. DNA 비밀번호
문제 설명
평소에 문자열을 가지고 노는 것을 좋아하는 민호는 어느날 DNA 문자열에 대하여 알게 되었다.
DNA 문자열은 ‘A’, ‘C’, ‘G’, ‘T’로만 구성되어있는 문자열을 말한다. 예를 들어서 “ACKA”는
DNA 문자열이 아니지만, “ACCA”는 DNA 문자열이다.
이런 신비한 문자열에 완전히 매료된 민호는 길이가 S 인 임의의 DNA 문자열을 만들고,
만들어진 문자열에서 연속된 P 글자를 추출해 비밀번호로 사용하기로 마음먹었다.
하지만 민호는 이렇게 만든 비밀번호에는 큰 문제가 있다는 것을 발견했다. 임의의 DNA
문자열에서 연속 부분 문자열을 추출할 경우, “AAAA”와 같이 보안에 취약한 비밀번호가 만들어
질 수 있기 때문이다.
그래서 민호는 각 알파벳 별로 암호에 최소한으로 포함되어야 할 개수를 정하기로 했다. 원본
DNA 문자열이 “AAACCTGCCAA”이고, 민호가 만들어 낼 비밀번호는 4 글자라고 하자. 민호가
‘A’는 1 개 이상, ‘C’는 1 개 이상, ‘G’는 1 개 이상, ‘T’는 0 개 이상 사용되어야 한다는 규칙을
정했다고 가정하다. 이 때 “ACCT”는 비밀번호가 될 수 없지만, “GCCA”는 비밀번호가 될 수 있다.
민호가 만든 임의의 DNA 문자열과 비밀번호이 될 수 있는 조건이 주어졌을 때, 민호가
비밀번호를 만들 수 있는 경우의수를 계산해보자. 단, 서로 같은 문자열이더라도 추출한 위치가
다르면 다른 암호로 계산한다.
입력 설명
첫 줄에는 민호가 만든 DNA 문자열의 길이 S 와 비밀번호로 사용할 부분 문자열의 길이 P 가
주어진다. S 와 P 는 1 과 1,000,000 사이의 정수이며 P 는 S 이하이다.
두번째 줄에는 민호가 만든 DNA 문자열이 주어진다. 모든 알파벳은 대문자이다.
세번째 줄에는 비밀번호에 포함되어야 할 각 알파벳의 최소 개수가 주어진다. 각각 ‘A’, ‘C’, ‘G’,
‘T’의 최소 개수를 의미한다. 각 수는 0 과 1,000,000 사이의 정수이다.
출력 설명
첫 줄에 민호가 조건에 맞는 비밀번호를 만들어 낼 수 있는 경우의 수를 출력한다.
12. 12
예제 데이터 1
입력 출력
41 30
AGGAACAGCGACTAACCCACTGAGGGTTACCTCTGCTGCTT
0 5 2 1
12
13. 13
G. I.O.I
문제 설명
모두에게 비밀로 하고 있지만, 사실 재현이는 인기 아이돌 그룹의 멤버 ‘사과’로 활동하고 있다.
재현이는 그룹 내에서 귀여움을 담당하고 있는데, 이를 인정받아 국제적인 아이돌 축제인
I.O.I(International Olympiad of Idols)에 한국 대표로 선발되어 참가하게 되었다.
I.O.I 는 기본적으로 축제이지만, 이름에 걸맞게 국가대항전 형식의 대회가 진행된다. 참가하는 각
국가별로 아이돌 N 명을 뽑아 대표팀으로 선발하고, 토너먼트 방식으로 대결하여 최종 우승팀을
결정한다.
재현이의 귀여움을 앞세워 한국 팀은 무난하게 결승에 진출할 수 있었다. 결승전은 크게 단체전과
개인전으로 이루어 지는데, 그 중 개인전은 양 팀에서 한 경기에 각 팀에서 한 명씩 나와 각자
개인의 기량을 뽐내며 대결하는 방식으로, 총 N 번이 진행된다. 개인전에 무승부는 존재하지
않는다.
각 팀의 대진표는 아래와 같은 방식으로 결정한다.
1. 가위 바위 보를 진행하여 이긴 팀이 먼저 선택권을 가진다.
2. 선택권을 가진 팀은 각 팀에서 아직 대진 상대가 정해지지 않은 한 명씩을 골라 그 둘을
대결 상대로 정한다. 그 이후 상대팀에게 선택권이 돌아간다.
3. 2 의 과정을 반복하다가 모든 사람의 대진 상대가 결정되면, 그 뒤에 개인전을 시작한다.
대회가 진행되면서 결승에 진출한 두 팀은 상대에 대한 정보를 완벽히 파악했고, 각자 자기 팀의
선수들이 상대팀의 어떤 선수과 대결을 했을 때 승률이 어느 정도 될지 계산해두었다. 이 분석
결과는 객관적이기 때문에 두 팀의 분석 결과는 완전히 동일하다. 즉 A 팀이 A 팀의 p 선수와
B 팀의 q 선수가 대결할 경우 승률을 40%라고 분석했을 경우, B 팀은 B 팀의 q 선수와 A 팀의
p 선수가 대결할 경우 승률을 60%라고 분석한다는 것이다.
재현이는 두 팀 모두 최선의 전략으로 대결 상대를 정하려고 한다고 할 때, 한국 팀이 첫
가위바위보를 이겼을 때와 졌을 때 두 경우에 대하여 각각 개인전에서 한국이 승리하는 횟수의
기대값을 구하고자 한다.
입력 형식
첫 줄에 각 팀에 소속된 선수의 수 N 이 주어진다. N 은 1 과 8 사이의 정수이다.
그 후 총 N 줄에 걸쳐 각 줄에 N 개의 숫자가 주어진다. i 번째 줄의 j 번째 숫자 𝑝B,C는 한국 팀의
i 번째 선수와 상대 팀의 j 번째 선수가 대결했을 때 한국팀이 승리할 확률을 나타낸다.
출력 형식
한국 팀이 가위바위보를 이겼을 때와 졌을 때의 승리하게 되는 대결의 수의 기대값을 공백으로
구분하여 출력한다. 출력한 답안과 실제 정답과의 오차가 10-.
이하인 경우 답안으로 인정한다.
15. 15
H. 사서왕 준서
문제 설명
준서는 세계 최고의 사서왕이 되는 것이 꿈이다. 사서왕이 되기 위해 모험을 떠난 준서는 세계
곳곳의 도서관을 돌아다니며 구직을 하고 있지만, 대 취업난 시대에 사서가 되는 길은 요원하기만
했다.
낙담하며 국가의 부름에 응하기 위해 준비하던 준서에게 일생일대의 기회가 찾아왔다. 세계
최고의 도서관을 소유하고 있는 ANSI(Ajou Nerd Standards Insititution)의 사서 공채에 합격한
것이다!
합격 메일을 받은 준서는 뛸 듯이 기뻤지만 그것도 잠시, ANSI 의 사서가 되기 위해서는 사서의
기본 소양을 검증받기 위한 교육 과정을 거쳐야만 한다. 보통의 도서관이었다면 사서왕이
되겠다는 일념으로 해냈을 준서지만, ANSI 의 근무환경은 너무나도 열악했다.
그 중에서도 가장 힘든 것은 도서정리이다. 도서관을 찾은 사람들이 책을 찾기 쉽도록 책장의
책을 번호에 대하여 비내림차순으로 배치해야 한다. 하지만 ANSI 회원들 중에서도 Nerd of
Nerd, King of Nerd 라고 불리는 용재 D. 애쉬가 하루종일 눌러 앉아서 책들을 마구 열람하고
아무데나 꽂아버리는 것이다! 너드들의 도서관답게 책들의 무게도 보통이 아니어서, 근육통까지
얻은 준서는 매일밤 베갯잇을 눈물로 적시며 보냈다.
가엾은 준서가 군인이 아닌 사서로서 일을 할 수 있도록, 책을 정리하는데에 필요한 최소의
노동력은 얼마인지 계산해주자. 노동력이란 책을 옮기는데에 사용한 힘들의 총 합으로, 책 한권을
옮기기 위해서는 이동거리와 상관 없이 해당 책의 무게만큼의 힘이 필요하다. 새로운 책을 꽂을
책장의 공간은 항상 넉넉하며, 도서 정리는 책 사이의 공간은 무시한 채 책의 순서만 맞으면 된다.
입력 설명
첫 줄에 준서가 정리해야하는 책의 수 N 이 들어온다. N 은 1 과 5,000 사이의 정수이다.
두 번째 줄에는 준서가 정리해야하는 책의 번호가 N 개 주어진다. 각 번호의 위치는 현재 책이
꽂혀진 순서와 동일하다. 또한 모든 책의 번호는 0 과 1,000 사이의 실수이다.
세 번째 줄에는 각 책의 무게가 꽂힌 순서대로 N 개 주어진다. 각 책의 무게는 1 과
10,000 사이의 정수이다.
출력 설명
한 줄에 책을 정리하는 데 필요한 최소의 노동력을 정수 형식으로 출력한다.
16. 16
예제 데이터 1
입력 출력
3
802.11 813.1 107
4 5 6
6
- 3 번째 책을 맨 앞으로 옮길 때 드는 힘 6 이 최소이다.
예제 데이터 2
입력 출력
9
813.8 812 816 813 811 813 813.6 801.9
880.1
6 20 5 8 17 20 12 41 6
69
- 1, 3, 5, 8 번 책을 맞는 자리로 옮기는 힘의 합 6 + 5 + 17 + 41 = 69 가 최소가 된다