[프로그래머스] DFS/BFS: 단어 변환 (Lv3)

김민주·2023년 4월 5일
0

알고리즘 문제풀이

목록 보기
14/14

문제

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

코드

import java.io.*;
import java.util.*;
class Solution {
    static int n;
    static int min = Integer.MAX_VALUE;
    
    public int solution(String begin, String target, String[] words) {
        int answer = 0;
        n = words.length;
        boolean[] isUsed = new boolean[n];
        
        dfs(begin, isUsed, 0, target, words);
        
        answer = min == Integer.MAX_VALUE ? 0 : min;
        return answer;
    }
    
    public void dfs(String cur, boolean[] isUsed, int cnt, String target, String[] words) {
     
        if(cur.equals(target)) {
            min = Math.min(min, cnt);
            return;
        }
        
        for(int i=0; i<n; i++) {
            if(!isUsed[i] && isChange(cur, words[i])) {
                isUsed[i] = true;
                dfs(words[i], isUsed, cnt+1, target, words);
                isUsed[i] = false;
            }
        }
    }
    
    public boolean isChange(String from, String to) {
        int diff = 0;
        int len = from.length();
        
        for(int i=0; i<len; i++) {
            if(from.charAt(i) != to.charAt(i)) {
                diff++;
            }
            
            if(diff > 1) {  // 두개 이상 알파벳이 다른 경우 변경 불가능.
                return false;
            }
        }
        
        return true;
    }
}

문자열 비교 시 == 연산자가 아닌 equals() 함수를 사용하도록 주의하기!

profile
백엔드 개발자

0개의 댓글

관련 채용 정보