두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다.
두 개의 단어 begin, target과 단어의 집합 words가 매개변수로 주어질 때, 최소 몇 단계의 과정을 거쳐 begin을 target으로 변환할 수 있는지 return 하도록 solution 함수를 작성해주세요.
words에 있는 단어로만 변환할 수 있습니다.
hit
, target가 cog
hot
,dot
,dog
,lot
,log
,cog
] 라면 hit
-> hot
-> dot
-> dog
-> cog
와 같이 4단계를 거쳐 변환할 수 있습니다.target으로 도착하기까지 모든 횟수를 구하지 않고 최소로 변환할 수 있는 횟수만 필요하기 때문에 BFS를 사용했다.
dog
라는 단어로 변환될 수 있는 단어들이 많으면 어떡하지라는 생각이 처음엔 들었다.dog
에서 cog
로 한번만 변환하면 끝이기 때문에 dog
로 가는 최소 단계를 찾아나가면 되었다. 이렇게 단계별 최소 단계만 찾아간다. 먼저, begin의 단어가 words의 단어로 교체 가능한 경우 큐에 현재까지의 횟수와 함께 push
from collections import deque
def solution(begin, target, words):
changed = [0 for _ in range(len(words))]
que = deque()
que.appendleft([begin, 0])
while(que):
begin, count = que.pop()
if begin == target:
return count
for w in range(len(words)):
if not changed[w] and tf(begin, words[w]):
changed[w] = 1
que.appendleft([words[w], count+1])
return 0
# 변환 가능 여부 확인
def tf(b, t):
same = 0
for i in range(len(b)):
if b[i] == t[i]:
same += 1
if same == len(b)-1:
return True
return False
BFS 구조 설계하는 시간이 빨라졌다.😎 다음 포스트에는 BFS와 DFS를 구분 짓는 유형을 찾아보려한다.