알고리즘/문제풀이

[Python] Programmers 단어 변환

정찡이 2021. 10. 6. 13:13
728x90

1. 문제 링크

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

 

코딩테스트 연습 - 단어 변환

두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수

programmers.co.kr


2. 문제 요약

한 번에 한 개의 단어만 변경하여 begin ⇒ target으로 변경하는 최소의 과정 찾기


3. 아이디어 정리

  • bfs로 현재 단어에서 변경 가능한 값을 방문하는 방식을 이용합니다.
  1. 현재 값이 target과 동일하면 그만
  2. 모든 단어를 현재 단어와 비교하여 1개 차이나는 경우 deque에 넣어서 방문하도록 한다.

4. 문제 풀이

4-1. 내 풀이

from collections import deque

def solution(begin, target, words):
    dq = deque([(begin, 0)])
    visit = [False] * len(words)

    while dq:
        now, count = dq.popleft()
        if now == target:   # target과 동일하면 현재 단계 리턴 
            return count
        # 모든 단어 확인하면서 1개 차이나는 것 찾기 
        for i, word in enumerate(words):
            if visit[i]:   # 방문한 경우 그만 
                continue
            if len([i for i, w in enumerate(word) if now[i] != w ]) == 1:
                dq.append((word, count + 1))
                visit[i] = True
    return 0  # 변환 불가능한 경우

 


5. 결론

  • bfs를 활용하여 begin 값에 너비 우선 탐색을 하는 문제