본문 바로가기
알고리즘/문제 풀이 (출처: 프로그래머스)

[JAVA/DFS]단어 변환

by 이민우 2024. 2. 24.
728x90
반응형

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/43163

 

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

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

programmers.co.kr

 

 

 

 

class Solution {
    
    int answer = Integer.MAX_VALUE;
    boolean[] converted;
    
    public int solution(String begin, String target, String[] words) {
        converted = new boolean[words.length];
        
        dfs(begin, target, words, 0);
        
        // answer이 바뀌지 않았다면 return 0
        if(answer == Integer.MAX_VALUE) {
            answer = 0;
        }
        
        return answer;
    }
    
    public void dfs(String word, String target, String[] words, int cnt) {
        if(word.equals(target)) {
            // 최소값일 경우 answer 갱신
            answer = Math.min(cnt, answer);
            return;
        }
        
        for(int i=0; i<words.length; i++) {
            // 겹치는 단어 수
            String w = words[i];
            int notDuplicated = 0;
            
            for(int j=0; j<word.length(); j++) {
                if(word.charAt(j) != w.charAt(j)) {
                    notDuplicated++;
                    if(notDuplicated >= 2) {
                        // 두 글자 이상 겹치면 break
                        break;
                    }
                }
            }
            
            if(notDuplicated == 1 && !converted[i]) {
                converted[i] = true;
                dfs(w, target, words, cnt+1);
                converted[i] = false;
            } 
        }
    }
}
728x90
반응형

'알고리즘 > 문제 풀이 (출처: 프로그래머스)' 카테고리의 다른 글

[JAVA/BFS] 숫자 변환하기  (0) 2024.05.07
[JAVA] 붕대 감기  (0) 2024.02.24
[JAVA/DFS] 여행경로  (0) 2024.02.24
[JAVA/DFS] 네트워크  (0) 2024.02.23
[JAVA/BFS] 가장 먼 노드  (0) 2024.02.23