DFS/BFS - 단어변환

송다은·2024년 10월 13일
from collections import deque

def solution(begin, target, words):
    # target이 words에 없으면 변환할 수 없으므로 0을 반환
    if target not in words:
        return 0
    
    # 큐 초기화 (변환할 단어, 변환 단계 수)
    queue = deque([(begin, 0)])
    
    # 방문 여부 체크를 위한 리스트
    visited = [False] * len(words)
    
    # 단어의 길이는 모두 같으므로 그 길이를 구해둠
    word_len = len(begin)
    
    # BFS 실행
    while queue:
        cur_word, cur_steps = queue.popleft()
        
        # 현재 단어가 target과 같다면 현재 단계 반환
        if cur_word == target:
            return cur_steps
        
        # words 리스트에서 한 글자만 다른 단어로 변환할 수 있는지 확인
        for i in range(len(words)):
            if not visited[i]:
                diff_count = 0
                for j in range(word_len):
                    if cur_word[j] != words[i][j]:
                        diff_count += 1  # 글자가 다른 위치를 세기
                
                # 한 글자만 다른 경우에만 큐에 넣고 방문 처리
                if diff_count == 1:
                    visited[i] = True
                    queue.append((words[i], cur_steps + 1))  # 큐에 (단어, 단계) 추가
    
    # target까지 변환할 수 없는 경우 0 반환
    return 0

keypoint

  • 검사하고 싶은 것은 append로 queue에 넣어두고 검사할 때 popleft()로 빼서 확인!! => 그럼 확실히 다음 리스트의 원소로 넘어갈 때 헷갈리지 않을 것 같다.
    - 이렇게 해두면 1뿌리에서 의심 되는 것을 1-2과 1-3도 queue에 추가하고 1-2와 1-3의 가지들도 확인할 수 있다..!!
profile
Anomaly Detection, AI Security, Multimodal

0개의 댓글