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]
- result =
- n = 5, words =
["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"]
- result =
[0, 0]
- result =
풀이
고려해야할 부분
- 이전 사람이 말한 단어의 끝과 현재 사람이 말한 단어의 처음이 같은지 확인해야한다.
- 이전 단어의 마지막 문자열을 기억하고 있다가 현재 단어의 첫번째 문자열과 비교
- 한번이라도 등장했던 단어가 또 등장하는지 확인해야한다.
- 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을 더해줘야한다.