[프로그래머스]단어 변환 - DFS/BFS

2021. 12. 12. 18:32·SW개발/코딩테스트

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

 

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

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

programmers.co.kr

 

BFS 알고리즘 이용

from collections import deque


def solution(begin, target, words):
    queue = deque()
    length = len(words)
    word_length = len(begin)
    
    # 단어를 변환할 수 있는지 여부를 체크하는 함수
    def can_change(word, change):
        diff = 0
        for i in range(word_length):
            if word[i] != change[i]:
                diff += 1
        if diff == 1:
            return True
        else:
            return False
    
    def bfs():    
        queue.append([begin, 0])

        # 변환할 수 없는 경우
        if target not in words:
            return 0
        
        while queue:
            word, depth = queue.popleft()
            
            if word == target:
                return depth
            
            # words 목록을 순회하며, 변경 가능한 경우에 큐에 추가.
            # 가장 빨리 target이 되는 경우가 최소 변환과정임 (BFS의 특징)
            for change in words:
                if can_change(word, change):
                    queue.append([change, depth+1])

    answer = bfs()
    return answer

 

코드 설명

can_change : 단어를 변환할 수 있는지 여부를 체크하는 함수

 

bfs :

  1. bfs 함수에서 초기값을(begin, depth=0) 큐에 넣어줍니다.
  2. 만약 변환할 수 없는 경우라면 0을 return 합니다.
  3. 큐가 존재할 때까지 반복합니다.
    1. 큐에서 word, depth를 빼옵니다.
    2. words 목록을 순회하면서 변경이 가능한 경우라면 큐에 추가합니다.
    3. 이 때, 가장 빨리 target이 되는 경우가 최소 변환 과정을 의미합니다. (depth를 return)

 

Point : BFS 알고리즘의 경우 주로 "최소"를 찾는데 사용됩니다. 해당 문제의 경우 최소 변환 과정을 찾는 것이기에 bfs를 이용하였습니다. 따라서 BFS 특징을 이용해 가장 빠르게 target이 되는 경우가 가장 최소의 변환 과정입니다.

 

728x90

'SW개발 > 코딩테스트' 카테고리의 다른 글

[프로그래머스]N으로 표현 - DP  (0) 2021.12.31
[프로그래머스]여행경로 - DFS/BFS  (0) 2021.12.13
[백준]1197번 - 최소 신장 트리, Kruskal, Prim  (0) 2021.10.21
[프로그래머스]섬 연결하기 - 그리디, 최소 신장 트리, Kruskal  (0) 2021.10.21
[프로그래머스]섬 연결하기 - 그리디, 최소 신장 트리, Prim  (0) 2021.10.21
'SW개발/코딩테스트' 카테고리의 다른 글
  • [프로그래머스]N으로 표현 - DP
  • [프로그래머스]여행경로 - DFS/BFS
  • [백준]1197번 - 최소 신장 트리, Kruskal, Prim
  • [프로그래머스]섬 연결하기 - 그리디, 최소 신장 트리, Kruskal
Leffe_pt
Leffe_pt
개발자로서 성장하면서 배워온 지식과 경험을 공유하는 공간입니다.
  • Leffe_pt
    Leffe's tistory
    Leffe_pt
  • 전체
    오늘
    어제
    • 분류 전체보기 (309)
      • SW개발 (305)
        • 코딩테스트 (172)
        • 개발이야기 (23)
        • IT 용어 (17)
        • Python (22)
        • Django (46)
        • Flask (2)
        • Database (3)
        • SQLAlchemy (0)
        • Javascript (5)
        • Linux, Unix (3)
        • JAVA (2)
        • Spring (10)
      • 회고 (4)
      • 사진 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    배공파용
    g
    배달비 공유
    배달
    컨트리뷰터
    라이프 스타일
    음식
    플레이스토어
    django
    Contributor
    트리 #AVL #알고리즘 #자료구조
    오픈소스
    어플리케이션
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Leffe_pt
[프로그래머스]단어 변환 - DFS/BFS
상단으로

티스토리툴바