https://programmers.co.kr/learn/courses/30/lessons/12981
"""
1. 아이디어
2. 시간복잡도
"""
def solution(n, words):
answer = []
num = 0 # 번호
seq = 0 # 차례
tmp_word = [] # 단어 중복을 확인하기 위한 임시 단어 모음 리스트
for i in range(len(words)):
if not tmp_word: # 단어 모음 리스트 안이 비었다면 (첫 단어인 경우)
tmp_word.append(words[i])
num += 1
seq += 1
else: # 단어 모음 리스트 안에 단어가 있다면 (두 번째 이후 단어인 경우)
# 이전 단어의 끝 알파벳과 현재 단어의 첫 알파벳이 같고, 단어 모음 리스트 안에 중복이 아니라면
if tmp_word[i-1][-1] == words[i][0] and words[i] not in tmp_word:
tmp_word.append(words[i])
num += 1
seq += 1
else: # 위의 if 조건을 만족하지 않는 경우
break
else: # 이 구문이 실행된다는 것은 끝말잇기가 정상적으로 종료된 것을 의미한다.
return [0, 0]
answer.append(num % n + 1)
answer.append(seq // n + 1)
return answer
편하게 문제 조건에 따라 코드로 구현하면 풀 수 있는 문제이다.
words 리스트를 중심으로 반복문을 돌려 임시 단어 모음 리스트 안에 단어들을 집어넣으면서 중복여부와 끝말잇기 조건이 충족되는지 확인하고 그 과정에서 번호와 차례를 계속 더해주어 마지막에 적절한 연산으로 계산해주면 된다.
def solution(n, words):
collection = [] # 사람들이 이미 말한 단어 모음집
for i in range(len(words)):
num = i % n + 1 # 사람의 번호
order = i // n + 1 # 사람의 차례
if collection: # 만약 단어 모음집에 한 글자라도 있다면
# 직전의 단어 끝 부분과 현재 단어 앞부분을 비교하고 이전 단어들 과의 중복 여부를 체크한다.
if collection[-1][-1] == words[i][0] and words[i] not in collection:
collection.append(words[i])
else: # 위의 if 조건을 충족하지 못한다면 끝말잇기가 종료된다.
return [num, order]
else: # 단어 모음집에 한 글자라도 없으면 단어를 집어 넣는다.
collection.append(words[i])
else: # 이 구문이 실행된다는 것은 끝말잇기가 정상적으로 종료된 것을 의미한다.
return [0, 0]
X