반응형
문제
끝말잇기는 단어를 중복하지 않고 단어의 맨 끝 글자에 이어서 말하는 놀이입니다. 끝말잇기 기록은 단어들의 나열로 이루어집니다. 올바른 끝말잇기 기록은 각 단어의 마지막 글자가 다음 단어의 첫 글자이며, 단어가 중복되어서 나타나면 안 됩니다.
끝말잇기 기록이 주어지는데, 하나의 기록은 “?”로 가려진 채로 들어옵니다. “?”에 들어갈 수 있는 문자열들의 후보가 주어질 때, 올바른 끝말잇기 기록을 만드는 “?”에 들어갈 문자열을 출력하세요.
입력
첫 줄에 끝말잇기 기록의 길이 이 주어집니다. 둘째 줄부터 다음 개의 줄에는 끝말잇기의 기록 이 한 줄에 하나씩 주어집니다. 여기서, 하나의 는 “?” 로 주어집니다. 나머지 는 길이 이상 이하의 영어 소문자로 이루어진 문자열입니다.
다음 줄에 후보 단어의 개수 이 주어집니다. 다음 개의 줄에는 후보 단어 이 주어집니다. 는 길이 이상 이하의 영어 소문자로 이루어진 문자열입니다. 은 서로 다릅니다.
문제의 답이 정확히 하나인 경우만 입력으로 주어집니다.
출력
“?”에 들어갈 수 있는 문자열을 후보 단어인 중에서 하나 찾아서 출력하세요.
예제 입력 1
5
charlie
echo
?
romeo
oscar
3
alfa
oscar
or
예제 출력 1
or
각 후보 단어를 넣었을 때의 끝말잇기 기록은 다음과 같습니다.
- alfa: charlie - echo - alfa - romeo - oscar
- 끝말잇기 기록의 두 번째 단어의 끝 글자인 ‘o’가 세 번째 단어의 시작 글자인 ‘a’와 다릅니다.
- oscar: charlie - echo - oscar - romeo - oscar
- “oscar”가 중복해서 나타납니다.
- or: charlie - echo - or - romeo - oscar
- 올바른 끝말잇기 기록입니다.
아 입력이 1개일 경우도 생각을 했어야됬다...
낚임
문제를 제대로 읽자.
n = int(input())
k = [input() for _ in range(n)]
idx = k.index('?')
ni = int(input())
q = [input() for _ in range(ni)]
if len(q) > 1:
for s in q:
if s not in k:
if idx == 0:
if s[-1] == k[idx+1][0]:
print(s)
break
elif idx == n-1:
if s[0] == k[idx-1][-1]:
print(s)
break
else:
if s[-1] == k[idx+1][0] and s[0] == k[idx-1][-1]:
print(s)
break
else:
print(q[0])
반응형
'알고리즘' 카테고리의 다른 글
[BAEKJOON] 24723 녹색거탑 (0) | 2025.09.17 |
---|---|
[BAEKJOON] 16430 제리와 톰 (0) | 2025.09.17 |
[BAEKJOON] 15920 선로에 마네킹이야!! (0) | 2025.09.16 |
[BAEKJOON] 5598 카이사르 암호 (0) | 2025.09.12 |
[BAEKJOON] 32297 문자열을 만들어요 (0) | 2025.09.12 |