개발/algorithm
[프로그래머스][level2] 영어 끝말잇기 -python
zzi_on2
2022. 2. 8. 15:29
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/12981
코딩테스트 연습 - 영어 끝말잇기
3 ["tank", "kick", "know", "wheel", "land", "dream", "mother", "robot", "tank"] [3,3] 5 ["hello", "observe", "effect", "take", "either", "recognize", "encourage", "ensure", "establish", "hang", "gather", "refer", "reference", "estimate", "executive"] [0,0]
programmers.co.kr
풀이
- set을 이용해서 등장한 문자인지 확인해주고 end에 끝문자를 저장해서 비교해주었다.
def solution(n, words):
answer = []
# 끝말잇기에 등장한 단어 저장
word = set()
# 전 단어의 마지막 알파벳 저장
end = ''
for i in range(len(words)):
# 끝말잇기 시작이라면 word에 단어 추가하고, end 갱신
if not word :
end = words[i][-1]
word.add(words[i])
else :
# 등장한 단어거나 끝 문자와 시작 문자가 같지 않으면
if words[i] in word or words[i][0] != end:
# 사람의 번호
num = (i+1) % n
if num == 0 :
answer.append(n)
else:
answer.append(num)
# 차례
case = i // n + 1
answer.append(case)
return answer
# 등장하지 않은 단어이고 끝 문자와 시작 문자가 같다면 word에 추가 후 end 갱신
else :
word.add(words[i])
end = words[i][-1]
return [0,0]
- 사람의 번호는 아래처럼 계산했는데
# i는 배열의 인덱스
num = (i+1) % n
if num == 0 :
answer.append(n)
else:
answer.append(num)
다른 사람의 풀이를 보니깐 아래처럼 더 간단하게 표현할 수 있었다.
num = i % n + 1