오늘은 프로그래머스에서 영어 끝말잇기를 풀어보았습니다.
이 문제는 주어진 n 숫자의 사람이 words 리스트안에 담겨져 있는 순서대로
끝말잇기를 하다가 누가 탈락하는지와 탈락한 사람의 차례를 리턴하는 문제입니다.
그렇다면 어떤 경우에 선수가 탈락하는지 살펴 보겠습니다.
- 앞에 사람이 말한 단어의 알파벳 끝자리와 뒷 사람이 말한 알파벳 앞자리가 일치하지 않는 경우
- 이미 앞에서 말한적 있는 단어를 말한 경우
이렇게 두가지가 있습니다.
저는 이 문제를 풀때 for loop 하나만 썼는데요.
위의 두 경우를 if statement로 넣어두면 됩니다.
만약에 아무도 탈락한 사람이 없을 경우에는 문제에서 제시한 대로
[0,0] 을 리턴 합니다.
이 알고리즘을 코드로 작성해보았습니다.
def solution(n, words):
size = len(words)
for i in range(1,size):
if words[i][0] != words[i-1][-1] or words[i] in words[:i]:
return [(i%n)+1,(i//n) +1]
return [0,0]
정말 짧네요.. 코드가 짧고 간결하면 괜히 기분이 좋습니다.
설명하자면,
- 두 단어의 끝자리와 앞자리는 [-1]과 [0]을 이용하여 쉽게 찾아서 비교
- 앞에서 이미 등장했던 단어인지 확인하는건 words[:i]로 해당 자리의 앞부분만 잘라서 사용
- 탈락하는 사람의 번호는 (i%n)+1
- 탈락하는 사람이 몇번째 말한 단어에서 탈락인지는 (i//n) + 1
'Algorithm > 프로그래머스' 카테고리의 다른 글
(파이썬) [알고리즘 문제 풀이] - 네트워크 (프로그래머스) (0) | 2021.01.20 |
---|---|
(파이썬) [알고리즘 문제 풀이] - 같은 숫자는 싫어 (프로그래머스) (0) | 2021.01.16 |
(파이썬) [알고리즘 문제 풀이] - 오픈 채팅방 (프로그래머스) (0) | 2021.01.14 |
(파이썬) [알고리즘 문제 풀이] - 위장 (프로그래머스) (0) | 2021.01.12 |
[알고리즘 문제 풀이] - 더 맵게 (프로그래머스) (0) | 2021.01.12 |