1+ # 최소 편집 거리 =1 확인
2+ def check_edit1 (a ,b ):
3+ diff = 0
4+ for i in range (len (a )) :
5+ if a [i ] != b [i ] :
6+ diff += 1
7+ if diff > 1 :
8+ return False
9+ if diff == 1 :
10+ return True
11+
12+ from collections import deque
13+ def solution (begin , target , words ):
14+ answer = 0
15+ #excep1 :words 에 target없으면 -> 변환 불가
16+ if target not in words :
17+ return 0
18+
19+ # 1. 인접 graph 생성
20+ graph = [[] for _ in range (len (words )+ 2 )]
21+ # begin -> words, target 단방향
22+ for k in range (len (words )) :
23+ if check_edit1 (begin , words [k ]) :
24+ graph [0 ].append (k + 1 )
25+ if check_edit1 (begin ,target ):
26+ graph [0 ].append (len (words )+ 1 )
27+ # words -> wrods_1(쌍방향) , target(단방향)
28+ for k in range (len (words )):
29+ for j in range (k ,len (words )):
30+ if check_edit1 (words [k ], words [j ]):
31+ graph [k + 1 ].append (j + 1 )
32+ graph [j + 1 ].append (k + 1 )
33+ if check_edit1 (words [k ], target ):
34+ graph [k + 1 ].append (len (words )+ 1 )
35+
36+ #2.BFS
37+ visited = [ 0 for _ in range (len (words )+ 2 )]
38+ def bfs (visited ):
39+ visited [0 ] = 0
40+ queue = deque ()
41+ queue .append (0 )
42+
43+ while queue :
44+ curr_idx = queue .popleft ()
45+ if len (graph [curr_idx ]) <= 0 : # 이웃한 놈이 없는 경우 => return 0
46+ return 0
47+
48+ for next_idx in graph [curr_idx ] :
49+ if not visited [next_idx ] :
50+
51+ queue .append (next_idx )
52+ visited [next_idx ] = visited [curr_idx ] + 1
53+
54+ if visited [- 1 ] : #성공
55+ return visited [- 1 ]
56+
57+ return visited [- 1 ]
58+
59+
60+ # print(graph)
0 commit comments