728x90
반응형
from collections import deque
def solution(begin, target, words):
dist = {begin: 0}
queue = deque([begin])
while queue:
current = queue.popleft()
next_words = []
for i in words:
diff = 0
for j in range(len(begin)) :
if i[j] != current[j]:
diff += 1
if diff == 1 :
next_words.append(i)
for next_word in next_words:
if next_word not in dist:
dist[next_word] = dist[current] + 1
queue.append(next_word)
return dist.get(target, 0)
1. 분류 : BFS
2. 풀이 방법
step 1) bfs 알고리즘을 구현하기 위하여 deque 를 사용한다.
step 2 ) dist = { 단어 : 변환한 수 } 를 표현하는 딕셔너리 이다. 처음에 begin 을 넣고 deque 에도 begin 을 넣는다.
step 3 ) current 는 지금 검증할 단어이다.
-> 만약 current 와 알파벳 1개 차이가 나는 단어가 있다면 next_words 배열에 넣는다.
step 4 ) next_words 가 전에 바뀌었던 단어가 아니라면, dist 와 queue 에 넣어 준다.
=> 4 단계 까지 오게 되면 모든 단어 변환을 거친다.
step 5 ) 만약 dist 에 target 이 있다면 ( 변환 가능함을 의미 ) 변환 한 수를 출력하고, 없다면 0 ( default ) 를 출력한다.
+ tip ) 딕셔너리의 get method
딕셔너리.get( key[ , defualt 값 ] )
: 딕셔너리에 key 가 있으면 해당 key의 value를 반환하고, 없으면 default에 지정한 값을 반환한다.
default 생략 시, 아무런 값도 ( None ) 반환하지 않는다.
728x90
반응형
'프로그래머스' 카테고리의 다른 글
탐욕법(Greedy) - 체육복 (0) | 2020.10.13 |
---|---|
정렬 - H-Index (0) | 2020.10.12 |
정렬 - K번째수 (0) | 2020.10.12 |
깊이/너비 우선 탐색(DFS/BFS) - 네트워크 (0) | 2020.10.11 |
깊이/너비 우선 탐색(DFS/BFS) - 타겟 넘버* (0) | 2020.10.11 |