본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 단어 변환

by 현장 2026. 1. 8.

-Code

class Solution {
    static int answer;
    
    public int solution(String begin, String target, String[] words) {
        // visited와 answer 초기화
        boolean[] visited = new boolean[words.length];
        answer = Integer.MAX_VALUE;
        DFS(0, begin, target, words, visited);
        return answer == Integer.MAX_VALUE ? 0 : answer;
    }
    
    private static void DFS(int cnt, String now, String target, String[] words, boolean[] visited) {
        // 목적어와 같아지면 값비교 후 최소값 저장
        if (now.equals(target)) {
            answer = Math.min(answer, cnt);
            return;
        }
        // 값을 돌면서 1개만 변한 문자열인데 방문하지 않은 경우 탐색
        for (int i = 0; i < words.length; i++) {
            if (!visited[i] && canChange(now, words[i])) {
                visited[i] = true;
                DFS(cnt + 1, words[i], target, words, visited);
                visited[i] = false;
            }
        }
    }
    // 한글자만 다른지 확인
    private static boolean canChange(String word1, String word2) {
        int cnt = 0;
        for (int i = 0; i < word1.length(); i++) {
            if (word1.charAt(i) == word2.charAt(i)) {
                cnt++;
            }
        }
        return cnt == (word1.length() - 1);
    }
}

answer 값 초기화를 이상하게 한 것과 실수로 예제만 보고 판단해서 3인 경우에만 1개만 변환 확인되는 메서드로 만들어서 틀렸었습니다. 그래서 해당 부분을 수정하여 해결했습니다.