[Python] 프로그래머스 - 영어 끝말잇기

728x90
반응형

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

# 코드가 좀 정리가 안되었긴 하지만 속도를 빠르게 하기위해 dictionary를 사용했다.

 

# 14 ~ 16번째 케이스를 나눈 이유는 turn % n을 하면 나머지이므로 n이 3일때 0,1,2 이런식으로 나온다.

   근데, 문제에서 순서는 1부터 시작해서 1,2,3 이렇게 되므로 turn % n 이 0이면 실제 순서는 n이 된다.

from collections import defaultdict
import math
def solution(n, words):
    # first = 첫 단어, dic에 first 키 추가, turn(차례) = 2
    answer = []
    dic = defaultdict(int)
    turn = 2
    first = words[0]
    dic[first] = 1
    # word의 2번째 단어부터 반복문을 돈다.
    for w in words[1:]:
        # first의 마지막 글자와 현재 w의 첫번째 글자가 다르거나 w in dic(이미 사용한 단어라면)이면
        if first[-1] != w[0] or w in dic:
            if turn % n == 0:
                answer = [n, math.ceil(turn / n)]
            else:
                answer = [turn % n, math.ceil(turn / n)]
            break
        # 제대로 끝말잇기가 되었으면 dic에 w 키 추가, first = w, turn 1 증가
        else:
            dic[w] = 1
            first = w
            turn += 1
    # answer이 비어있으면 [0,0] 아니면 answer을 return 해줌        
    return answer if answer else [0,0]

(프로그래머스 level: 2)

728x90
반응형
TAGS.

Comments