1+
2+ # 두 단어가 한글자만 다른지 확인하는 함수
3+ def count_same_letter (word1 , word2 ):
4+
5+ count = 0
6+ word_length = len (word1 )
7+ # 모든 단어의 길이는 같으므로 단어의 길이만큼 반복문 돌면서 같은 글자 계산
8+ for i in range (word_length ):
9+ if word1 [i ] == word2 [i ]:
10+ count += 1
11+
12+ if word_length - 1 == count :
13+ return True
14+ else :
15+ return False
16+
17+
18+
19+ def dfs (begin , target , words , depth ):
20+ global words_num
21+ global min_value
22+
23+ # depth가 words의 크기보다 커지면 해당 탐색 종료
24+ if depth > words_num :
25+ return
26+
27+ # begin과 target이 같다면 탐색 종료
28+ if begin == target :
29+ # 현재 depth와 최솟값 비교
30+ min_value = min (min_value , depth )
31+ return
32+
33+ copy_words = words [:]
34+
35+ for i in range (len (words )):
36+ # 두 단어가 한글자만 다르다면 그 단어로 변환
37+ if count_same_letter (begin , words [i ]):
38+ # 단어 목록에서 현재 단어 제외하고
39+ removed_word = copy_words .pop (i )
40+ # 다음 detph dfs 실행
41+ dfs (removed_word , target , copy_words , depth + 1 )
42+ # 배열 원복
43+ copy_words .insert (i , removed_word )
44+
45+
46+
47+
48+ def solution (begin , target , words ):
49+
50+ # target이 words에 없어서 변환할 수 없는 경우
51+ if target not in words :
52+ return 0
53+
54+ # 단어의 개수
55+ global words_num
56+ words_num = len (words )
57+
58+ global min_value
59+ min_value = 10000
60+
61+ dfs (begin , target , words , 0 )
62+
63+ return min_value
0 commit comments