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

zunzero·2022년 10월 4일
0

알고리즘(파이썬)

목록 보기
54/54

https://school.programmers.co.kr/learn/courses/30/lessons/12981

어렵지 않은 간단한 문제이다.
우리가 평소 아는 끝말잇기 규칙에 위배되는 사람을 찾는 그런 문제이다.

내 풀이에 비해 굉장히 깔끔한 코드가 예시답안으로 작성되어 있어 소개하려 한다.

from collections import deque
import math
def solution(n, words):
    answer = []
    answer.append(words[0])
    result = deque(words[1:])
    count = 0
    for _ in range(len(words)-1):
        count += 1
        word = result.popleft()
        compare2 = list(word)
        compare = list(answer[-1])
        if compare[-1] == compare2[0] and answer.count(word) == 0:
            answer.append(word)
        else:
            a = count % n + 1
            b = count // n + 1
            return [a, b]
    return [0, 0]

우선 내 풀이의 경우 deque 라이브러리를 활용해 큐 자료구조를 사용했다.
큐에서 하나씩 꺼내면서 스택에 담는 것이다.
이 때, 스택의 마지막 단어와 비교해서 끝말잇기의 규칙에 맞는지 확인하고, 스택 안에 해당 단어가 있는지를 확인하는 과정을 거친다.
만약 조건을 만족하지 않는다면, 그때 결론을 도출하고, 모든 단어를 검사해도 조건을 만족한다면 [0, 0]을 리턴한다.

예시답안은 아래와 같다.

def solution(n, words):
    for p in range(1, len(words)):
        if words[p][0] != words[p-1][-1] or words[p] in words[:p]:
        	return [(p%n)+1, (p//n)+1]
    else:
        return [0,0]

간단한 문제에 걸맞는 간단한 풀이이다.
같은 로직이지만 매우 간단한 구현이다.

놀랍고 .. 대단하다 ..

profile
나만 읽을 수 있는 블로그

0개의 댓글