ํ์ด ์ผ๋จ DFS๋ก ํ์๋ค. ๊ทผ๋ฐ ํ์ด๋ฅผ ๋ณด๋ ๋ค BFS๋ก ํ์๋๋ผ. ๊ทธ๋์ ๋ค์๋ ๋ค์ ๋์ ํ ๊ฑฐ๋ค. DFS Code def solution(phone_book): from collections import deque def diff(word1, word2): ret = 0 for a, b in zip(word1, word2): if a != b: ret += 1 return ret def DFS(begin, visited, words, target, count): # print(begin, visited, words, target, count) global answer if begin == target: answer = min(answer, count) for w in words: if visited[w] == False and diff(begin, w) == 1: visited[w] = True DFS(w, visited, words, target, count+1) visited[w] = False def solution(begin, target, words): global answer answer = 1e6 if target not in words: return 0 visited = { w:False for w in words } visited[begin] = True DFS(begin, visited, words, target, 0) return answer BFS Code from collections import deque def diff(word1, word2): count = 0 for i in range(len(word1)): if word1[i] != word2[i]: count += 1 return count def solution(begin, target, words): if target not in words: return 0 answer = 0 q = deque() q.append([begin, 0, []]) while q: word, count, path = q.pop() if word == target: answer = count break for w in words: if diff(w, word) == 1 and w not in path: q.append([w, count+1, path + [w]]) return answer Reference ๋จ์ด ๋ณํ