노력에는 지름길이 없으니까요

프로그래머스 - 영어 끝말잇기 Python ver. 본문

Python/프로그래머스

프로그래머스 - 영어 끝말잇기 Python ver.

데건 2024. 7. 21. 16:03
728x90

아이패드의 티스토리 앱에서는 서식을 못 쓰네…
우선 기록이라도 해두겠다

20240721
Python
level 2
영어 끝말잇기

앞에 나온 단어를 썼거나, 끝말잇기에 실패한 라운드와 실패한 사람 번호를 반환


def solution(n, words):
    test = [words[0]]
    for i in range(len(words)-1) :
        if words[i+1] in test or not words[i+1].startswith(words[i][-1]):
            return [(i+1)%n+1, (i+1)//n+1]
        test.append(words[i+1])
    return [0,0]


코드설명 :
처음에는 words 자체를 2차원 배열로 바꾸는 작업이 필요할까 싶었지만, 원하는 데이터의 배열 자리만 찾으면 된다는 걸 깨달았다.
(내가 복잡도에서 항상 골머리를 썩히는 이유… 모든 데이터에 대한 처리를 하려고 한다는 점)

그래서 필요한 지점에서 바로 2차원 배열 값을 만들어 리턴하는 방법을 사용했다.
문제에서 제안되어 있는 break 조건은 두 개.
1. 앞에 나왔던 단어가 또 있을 때 -> words[i+1] in test
2. 끝말잇기에 실패했을 때 -> not words[i+1].startswith(words[i][-1])
두 가지를 or 조건으로 묶는다.

내가 test 배열을 굳이 사용한 이유가 게을러서임을 알기 때문에 ㅠㅠ (아래의 words[:p]를 써보려다 귀찮아서 그냥 리스트에 넣어버렸다)
다음에 제출하기 전에는 정답에 연연하지 말고 조금 더 머리를 써서 더 간단하고 아름다운 코드를 써봐야겠다….

베스트 코드

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]



728x90
반응형