n은 끝말잇기를 진행하는 사람의 수이고 words는 순서대로 사람들이 말한 단어들에 해당한다. 이때, 단어의 길이가 2보다 작으면 안된다.
끝말잇기이기 때문에 당연히 앞 사람이 말한 앞의 단어의 끝 문자열과 그 다음 사람이 말한 단어의 앞 문자열이 같아야한다. 그렇지 않다면 몇 번째 사람이 몇 번째 turn에서 틀렸는지 바로 반환해준다.
혹은 이전에 끝말잇기를 진행하면서 나온 적이 있는 단어를 말하면 그 때도 위와 같이 끝말잇기를 멈추고 값을 반환한다.
import math
def solution(n, words):
#n 은 사람 수 words는 말한 단어들
visited=[]
answer = []
for i in range(0,len(words)):
if(len(words[i]) < 2):
#단어의 길이가 2보다 작다면
wrong = ((i)%n)+1
answer.append(wrong)
#math 라이브러리의 "올림" 이용
turn = math.ceil(i/n)
answer.append(turn)
return answer
elif(i!=(len(words)-1) and words[i][-1] != words[i+1][0] and words[i] not in visited):
#visited 리스트에도 존재하지 않는 단어이면서 앞단어의 끝 문자열과 뒷 단어의 앞 문자열이 달라 끝말잇기가 성리하지 않는 경우
#끝말잇기 i+1 번째 인덱스에서 실패한 경우
wrong = ((i+1)%n)+1
answer.append(wrong)
turn = math.ceil((i+2)/n)
answer.append(turn)
return answer
#말한 적이 있는지
elif words[i] in visited:
wrong = ((i)%n)+1
answer.append(wrong)
turn = math.ceil((i+1)/n)
answer.append(turn)
return answer
elif words[i] not in visited:
#말한 적이 없는 단어
visited.append(words[i])
#어떠한 조건에도 해당하지 않는다.
answer = [0,0]
return answer
📌 고려해야할 점
딱히 생각해내서 풀어야하는 알고리즘이 존재하는 것 같지는 않다. 조건들을 잘 판단하고 언제 바로 answer를 return 해주는지가 관건이다.