Skip to content

Commit 6f11734

Browse files
committed
1 parent 95b6426 commit 6f11734

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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

Comments
 (0)