"""
입출력 예시)
begin = "hit", target = "cog", words = ["hot", "dot", "dog", "lot", "log", "cog"] -> 4
begin = "hit", target = "cog", words = ["hot", "dot", "dog", "lot", "log"] -> 0
"""
## 의사코드 ##
# begin에서 target으로 변환하는 가장 짧은 변환 과정 -> BFS
# -> deque
# 한 번에 한 개의 알파벳만 변경 가능
# for i in range(len(words)):
# for j in range(len(word)):
# if word[j] != words[i][j]:
# return
# 변환할 수 없는 경우에는 0
# if target not in words:
# return 0
통과한 코드
from collections import deque
def solution(begin, target, words):
answer = 0 # 거치는 과정의 수
q = deque([(begin, 0)]) # (단어, 거친 과정의 개수)
visited = [0] * (len(words)+1)
# 변환할 수 없는 경우
if target not in words:
return 0
# 변환 가능한 경우 BFS 수행
while q:
word, answer = q.popleft()
if word == target:
return answer
for i in range(len(words)):
temp = 0 # 다른 알파벳의 개수
if not visited[i]: # visited[i] = 0일 때
for j in range(len(word)):
# 알파벳이 다를 때마다 temp 1씩 증가
if word[j] != words[i][j]:
temp += 1
# 알파벳이 한 개만 다른 경우
if temp == 1:
# 방문 처리
visited[i] = 1
q.append((words[i], answer+1))
return answer
'한 번에 한 개의 알파벳만 바꿀 수 있음' 이라는 조건을 어떻게 구현할지가 좀 어려웠지만