Algorithm/프로그래머스

(파이썬) [알고리즘 문제 풀이] - 영어 끝말잇기 (프로그래머스)

Jesse 2021. 1. 15. 02:20

오늘은 프로그래머스에서 영어 끝말잇기를 풀어보았습니다.

이 문제는 주어진 n 숫자의 사람이 words 리스트안에 담겨져 있는 순서대로

끝말잇기를 하다가 누가 탈락하는지와 탈락한 사람의 차례를 리턴하는 문제입니다.

그렇다면 어떤 경우에 선수가 탈락하는지 살펴 보겠습니다.

  1. 앞에 사람이 말한 단어의 알파벳 끝자리와 뒷 사람이 말한 알파벳 앞자리가 일치하지 않는 경우
  2. 이미 앞에서 말한적 있는 단어를 말한 경우

이렇게 두가지가 있습니다.

저는 이 문제를 풀때 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