https://programmers.co.kr/learn/courses/30/lessons/43163
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다.
begin = "hit"
target = "cog"
words= ["hot", "dot", "dog", "lot", "log", "cog"]
return 4
from collections import deque
def available(w1, w2):
wrong = 0
for i in range(len(w1)):
if w1[i] != w2[i]:
wrong += 1
if wrong > 1:
return False
return True
def bfs(word, target, words):
queue = deque()
queue.append([word, 0, []])
while queue:
cur = queue.popleft()
depth = cur[1]
path = cur[2]
if cur[0] == target:
return depth
for w in words:
if available(cur[0], w):
if w not in path:
queue.append([w, depth + 1, path + [w]])
return 0
def solution(begin, target, words):
if target not in words:
return 0
return bfs(begin, target, words)