
출처 : 프로그래머스 코딩테스트 연습
https://programmers.co.kr/learn/courses/30/lessons/12981
def solution(n, words):
ls = [0] * n
s = []
for i, w in enumerate(words):
if len(s)!= 0:
if w[0] != s[-1][-1]: # 올바른 끝말잇기가 아닌 경우 break
return[(i%n)+1, ls[i%n]+1] # 탈락하는 사람의 번호는 (i%n)+1, 차례는 ls[i%n]+1
if w not in s:
s.append(w)
ls[i%n] += 1 # 올바른 끝말잇기를 한 경우 [i%n]+1번째 사람의 차례 +1
else: # 이미 나온 단어를 얘기한 경우 break
return[(i%n)+1, ls[i%n]+1] # 탈락하는 사람의 번호는 (i%n)+1, 차례는 ls[i%n]+1
if words == s: #모두가 다 올바른 끝말잇기를 진행한 경우 [0,0] return
return [0,0]
예전에 풀었던 문제인데 for문을 한 번 더 돌리는 게 효율성 면에서 안 좋은 것 같아서 for문을 빼고 바로 return하게 바꿔보았다
(예전 풀이는 맨 마지막에 else문을 추가했었다...⬇)
def solution(n, words):
ls = [0] * n
s = []
for i, w in enumerate(words):
if len(s)!= 0:
if w[0] != s[-1][-1]:
break
if w not in s:
s.append(w)
ls[i%n] += 1
else:
break
if words == s:
return [0,0]
else:
for i, l in enumerate(ls):
if l == min(ls):
return [i+1,l+1]