Scribbling

프로그래머스: 단어 변환 본문

Computer Science/Coding Test

프로그래머스: 단어 변환

focalpoint 2021. 11. 1. 20:57

이와 유사한 문제를 이미 풀어보았다.

* for문 안에서 삭제할때는 항상 주의하자.

https://focalpoint.tistory.com/101

 

LeetCode: 126. Word Ladder II - 시바견의 끄적임

개인적으로 어려웠던 문제... A. 내가 푼 방법 일단 내가 푼 방법은 아래와 같다. 1) 모든 word에 대해 graph를 그린다. (word간 글자가 1개만 차이나는 경우 연결) 2) 다익스트라 알고리즘으로 최단 경

focalpoint.tistory.com

from collections import deque
def solution(begin, target, words):
    if target not in words:
        return 0
    words = set(words)
    words.discard(begin)
    def neighbors(word):
        for i in range(len(word)):
            for c in 'abcdefghijklmnopqrstuvwxyz':
                candidate = word[:i] + c + word[i+1:]
                if candidate in words:
                    yield candidate
    paths = deque()
    paths.append([begin])
    while paths:
        path = paths.popleft()
        if path[-1] == target:
            return len(path) - 1
        deletes = set()
        for neighbor in neighbors(path[-1]):
            paths.append(path+[neighbor])
            deletes.add(neighbor)
        words -= deletes
    return 0