본문 바로가기
알고리즘

[BAEKJOON] 28432 끝말잇기

by mAlfred 2025. 9. 16.
반응형

문제

끝말잇기는 단어를 중복하지 않고 단어의 맨 끝 글자에 이어서 말하는 놀이입니다. 끝말잇기 기록은 단어들의 나열로 이루어집니다. 올바른 끝말잇기 기록은 각 단어의 마지막 글자가 다음 단어의 첫 글자이며, 단어가 중복되어서 나타나면 안 됩니다.

끝말잇기 기록이 주어지는데, 하나의 기록은 “?”로 가려진 채로 들어옵니다. “?”에 들어갈 수 있는 문자열들의 후보가 주어질 때, 올바른 끝말잇기 기록을 만드는 “?”에 들어갈 문자열을 출력하세요.

입력

첫 줄에 끝말잇기 기록의 길이  이 주어집니다.  둘째 줄부터 다음 개의 줄에는 끝말잇기의 기록 이 한 줄에 하나씩 주어집니다. 여기서, 하나의 는 “?” 로 주어집니다. 나머지 는 길이  이상  이하의 영어 소문자로 이루어진 문자열입니다.

다음 줄에 후보 단어의 개수 이 주어집니다.  다음 개의 줄에는 후보 단어 이 주어집니다. 는 길이  이상  이하의 영어 소문자로 이루어진 문자열입니다. 은 서로 다릅니다.

문제의 답이 정확히 하나인 경우만 입력으로 주어집니다.

출력

?”에 들어갈 수 있는 문자열을 후보 단어인  중에서 하나 찾아서 출력하세요.

예제 입력 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])
반응형