Python

[좌충우돌, 파이썬으로 자료구조 구현하기] 영어 끝말 잇기

Wix 2023. 9. 11. 20:32

문제

1부터 n까지 번호가 붙어있는 n명의 사람이 영어 끝말잇기를 하고 있습니다. 사람의 수 n과 사람들이 순서대로 말한 단어 words 가 매개변수로 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해서 return 하도록 solution 함수를 완성해 주세요.

예시

  • n = 3, words = ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"]
    • result = [3, 3]
  • n = 5, words = ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"]
    • result = [0, 0]

풀이

고려해야할 부분

  1. 이전 사람이 말한 단어의 끝과 현재 사람이 말한 단어의 처음이 같은지 확인해야한다.
    • 이전 단어의 마지막 문자열을 기억하고 있다가 현재 단어의 첫번째 문자열과 비교
  2. 한번이라도 등장했던 단어가 또 등장하는지 확인해야한다.
    • set() 집합을 이용하여 이미 등장한 단어인지 확인한다.
def englishEndsWords(n, words):
    check = set()
    tail = words[0][0]
    for i, word in enumerate(words):
        if word in check or tail != word[0]:
            return [i % n + 1, i // n + 1]
        check.add(word)
        tail = word[-1]
    return [0,0]
  • 결과는 [번호, 차례] 로 반환하기 위해서 i는 0부터 시작하므로 번호는 n번째마다 자기 차례로 돌아오니 n으로 나눈 나머지에 0번째 부터가 아닌 1번째 부터니깐 1을 더해준다.
  • 차례의 경우, i가 0부터 시작하므로 단어의 순서를 사람 수 n으로 나눈 몫에다가 1을 더해줘야한다.