이해
- n명의 사람이 다음과 같은 규칙으로 영어 끝말잇기를 한다.
- 1번부터 번호 순서대로 한 사람씩 차례대로 단어를 말한다.
- 마지막 사람이 단어를 말한 다음에는 다시 1번부터 시작한다.
- 앞사람이 말한 단어의 마지막 문자로 시작하는 단어를 말해야 한다.
- 이전에 등장했던 단어는 사용할 수 없다.
- 한 글자인 단어는 인정되지 않는다.
- 사람의 수와 사람들이 순서대로 말한 단어를 담고있는 배열이 주어질 때, 가장 먼저 탈락하는 사람의 번호와 그 사람이 자신의 몇 번째 차례에 탈락하는지를 구해라.
계획
- 이전에 등장했던 단어를 저장하기 위한 배열 하나를 선언한다.
- words 배열의 단어를 차례대로 하나 씩 탐색하여 단어가 이전에 등장했던 단어이거나 앞사람이 말한 단어의 마지막 문자로 시작하는 단어인지 확인해준다.
- 사람의 번호는 입력받은 words 배열의 index를 참여자 수로 나눈 나머지에 1을 더한 값으로 구해준다.
- 몇 번째 차례인지에 대해서는 turn 변수를 하나 선언하여 words 배열의 인덱스를 참여자 수로 나눈 나머지가 0인 경우에 1씩 증가시켜주어 구해준다.
실행
def solution(n, words):
spoken = []
turn = 0
for i, word in enumerate(words):
if i % n == 0:
turn += 1
if word in spoken or (i > 0 and words[i-1][-1] != word[0]):
return [i % n + 1, turn]
spoken.append(word)
return [0, 0]
개선
- turn 변수를 사용하지 않고도 탐색중인 단어의 인덱스 값으로 몇 번째 차례인지를 계산할 수 있다.
- 이전에 등장했던 단어들을 따로 저장하지 않고 words 배열을 가지고 현재 탐색중인 단어가 이전에 등장했던 단어인지를 확인할 수 있다.
def solution(n, words):
for i, word in enumerate(words):
if word in word[:i] or (i > 0 and words[i-1][-1] != word[0]):
return [i % n + 1, i//n + 1]
return [0, 0]
회고
- 쉬웠고, 코드를 간결하게 짜기에는 파이썬 언어가 최고인 것 같다.