한 글자 씩만 바꿀 수 있으니까 앞 단어에서 한 글자만 다른 애들이 같은 depth → depth도 단어랑 같이 저장해주기
쭉쭉 타고와서 타켓 단어 도달하깅
도달했을 때 depth 젤 작은 경우가 가장 짧은 변환 과정
depth와 최단 경로??? 고러면 bfs로 샤삿 돌아보면 될 듯
📖풀이
📎BFS
from collections import deque# BFSdef bfs(begin, target, words): cnt = 50 q = deque([(begin,0)]) # (단어, 변환횟수) v = {word: False for word in words} while q: now, dep = q.popleft() v[now] = True # target 단어 도달 if now == target: cnt = min(cnt, dep) # 한 알파벳만 다른 단어 찾기 for word in words: diff = 0 # 이미 지나온 단어 패스 if v[word]: continue for n, w in zip(now, word): if n != w: diff += 1 # 한 알파벳만 다른 단어인 경우 if diff == 1: q.append([word, dep+1]) return cnt# maindef solution(begin, target, words): # target 단어가 아예 없을 경우 if target not in words: return 0 return bfs(begin, target, words)
📖What I learned
경로!! 하면 DFS/BFS 기억하기
⭐️ 그 중에서도 최단 경로, depth를 이용한 경로는 BFS를 바로 떠올리자
zip으로 각 시퀀스 묶어서 새로운 iterable 자료형 만드는 것 뿐만 아니라 이렇게 같은 idx의 값 비교도 가능했다
⭐️ 같은 길이의 단어라서 가능했음, 길이 다르면 더 긴 자료형의 나머지 요소들은 사용되지 않음