[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 단어 변환

2026. 4. 21. 19:11·알고리즘 & 자료구조/문제 풀이

https://school.programmers.co.kr/learn/courses/30/lessons/43163?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

1.  target이 단어 집합에 있나 확인 -> 없어서 틀렸었음

2. 하나가 다르면 바꿀 수 있다를 갈 수 있다고 생각하면 Node끼리의 최단 거리로 생각할 수 있다.

3. bfs에 begin을 넣고 단어 집합에 하나만 다른 단어를 q에 넣고 count를 늘려서 레벨별로 나아간다.

3.1) Node 클래스를 만들어서 count를 같이 보내주면서 노드 하나씩 보는 방법도 있지만 여기서는 
같은 레벨에 있는 단어들을 하나씩 확인하고 다음으로 나아가는 식으로 bfs를 구현했음

import java.util.*;

class Solution {

    public int solution(String begin, String target, String[] words) {
        if(!containsTarget(target, words)) {
            return 0;
        }
        
        return bfs(begin, target, words);
    }

    public int bfs(String begin, String target, String[] words) {
        Queue<String> q = new ArrayDeque<>();
        boolean[] visited = new boolean[words.length];
        
        q.add(begin);
        int count = 0;
        while(!q.isEmpty()) {
            int size = q.size();
            
            for(int i=0; i<size; i++) {
                String curr = q.poll();
                
                if(curr.equals(target)) {
                    return count;
                }
                
                for(int j=0; j<words.length; j++) {
                    if(visited[j]) continue;
                    
                    if(canTransform(curr, words[j])) {
                        q.add(words[j]);
                        visited[j] = true;
                    }
                }
            }
            count++;
        }
        return count;
    }
    
    public boolean containsTarget(String target, String[] words) {
        for(String word : words) {
            if(word.equals(target)) {
                return true;
            }
        }
        return false;
    }
    public boolean canTransform (String u, String v) {
        int diffCount = 0;
        
        for(int i=0; i<u.length(); i++){
            if(u.charAt(i) != v.charAt(i)) {
                diffCount++;
                if(diffCount > 1) {
                    return false;
                }
            }
        }
        return diffCount == 1;
    }
}
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 & 자료구조 > 문제 풀이' 카테고리의 다른 글

[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] N으로 표현  (0) 2026.04.19
[프로그래머스 알고리즘 고득점 Kit][그래프][Java] 방의 개수  (0) 2026.04.18
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] 정수 삼각형  (0) 2026.04.17
[프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] 등굣길  (0) 2026.04.17
[LeetCode][Java] 1768. Merge Strings Alternately  (0) 2026.04.16
'알고리즘 & 자료구조/문제 풀이' 카테고리의 다른 글
  • [프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] N으로 표현
  • [프로그래머스 알고리즘 고득점 Kit][그래프][Java] 방의 개수
  • [프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] 정수 삼각형
  • [프로그래머스 알고리즘 고득점 Kit][동적계획법(Dynamic Programming))][Java] 등굣길
수수다
수수다
우하하
  • 수수다
    그냥살자
    수수다
  • 전체
    오늘
    어제
    • 분류 전체보기 (49) N
      • 프로젝트 (1)
      • 알고리즘 & 자료구조 (23) N
        • 내용 정리 (2)
        • 문제 풀이 (21) N
      • 데이터베이스 (21) N
        • 내용 정리 (1)
        • 문제 풀이 (20) N
      • CS (2)
      • 기타 (2)
  • 블로그 메뉴

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

    • 네이버 블로그
  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    코팅테스트
    date_format
    Java
    코딩테스트
    해시
    mysql
    코테
    분리집합
    HTTP 메서드
    bfs
    DP
    프로그래머스 알고리즘 고득점 kit
    그래프
    SQL
    coalesce
    평균회귀
    알고리즘
    바킹독
    삼성청년SW·AI아카데미
    IFNULL
    싸피
    SSAFY
    이분탐색
    유니온파인드
    동적계획법
    깊이/너비 우선 탐색(DFS/BFS)
    바이브코딩
    매개변수탐색
    DisjointSet
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
수수다
[프로그래머스 알고리즘 고득점 Kit][깊이/너비 우선 탐색(DFS/BFS)][Java] 단어 변환
상단으로

티스토리툴바