[프로그래머스_43163] 단어 변환 Python 풀이

출처: 프로그래머스

문제

image

풀이

DFS로 풀었습니다.

가지치기로 일단 target이 단어에 없다면 변환할 수 없기 때문에 제외해주었습니다.

이미 확인해준 단어를 중복하여 확인하지 않기 위해 visited를 만들어주었고, 시작하는 단어랑 한 개의 알파벳만 다른 단어들을 valid함수를 이용해 구별하여 stack에 넣어주었습니다.

변환할 수 있는지, 방문한적이 없는지를 판단하고 stack에 넣어준 뒤 word가 target이랑 같을 때 단계 수를 세어주던 answer를 return해주었습니다. solution을 찾지 못하고 while loop를 빠져나왔을 때는 0을 return해주었습니다.

코드

def valid(begin, target):
    cnt = 0
    for i in range(len(begin)):
        if begin[i] != target[i]:
            cnt += 1
    return cnt == 1
def solution(begin, target, words):
    if target not in words:
        return 0

    stack = []
    n = len(words)
    visited = [0 for i in range(n)]
    answer = 0

    for i in range(n):
        if valid(begin, words[i]):
            stack.append(i)

    while stack:
        idx = stack.pop()
        word = words[idx]
        visited[idx] = 1
        answer += 1
        for j in range(n):
            if valid(word, words[j]) and not visited[j]:
                stack.append(j)
            if word == target:
                return answer
    return 0

Leave a comment