본문 바로가기

ETC

프로그래머스 DFS/BFS 단어 변환 Python 풀이

반응형

https://programmers.co.kr/learn/courses/30/lessons/43163

 

코딩테스트 연습 - 단어 변환 | 프로그래머스

두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 있습니다. 2. words에 있는 단어로만 변환할 수 있습니다. 예를 들어 begin이 hit, target가 cog, words가 [hot,dot,dog,lot,log,cog]라면 hit -> hot -> dot -> dog ->

programmers.co.kr

역시 이번에도 잘 푼 사람의 풀이를... 조금 더 python스럽게 최적화 해서 가져와 보았다.

from collections import deque
# 일단 dfs, bfs는... queue를 써주는게 성능 면에서 매우 좋다.
def solution(begin, target, words):
	# 방문 여부와, 몇번의 변환이 필요한지를 저장하는 dict
    dist = {begin: 0}
    # 시작 word를 queue에 넣고 시작
    queue = deque([begin])

    while queue:
        current = queue.popleft()
        # words에서... 다른 게 하나 있는 녀석들만 filter 해준당... ㅋㅋ
        next_words = filter(lambda w : sum([int(x!=y) for x,y in zip(current,w)])==1,words)
        for next_word in next_words:
        	# 방문 한 적 없으면...
            if next_word not in dist:
            	# 이전 단어에서의 거리로 dist 딕셔너리에 등록
                dist[next_word] = dist[current] + 1
                queue.append(next_word)

    return dist.get(target, 0)
반응형