본문 바로가기
알고리즘/BFS|DFS

[프로그래머스 연습문제 level_3 ] 단어 변환

by happyhelen 2023. 12. 7.

bfs 로 풀었다.

import java.util.*;
class Solution {
    public int solution(String begin, String target, String[] words) {
        int answer = 0;
        
        if(!Arrays.asList(words).contains(target)){
            return 0;
        }
        
        Queue<String> myQueue = new LinkedList<>();
        int[] visited = new int[words.length];
        
        for ( int i = 0; i < words.length; i++ ) {
            if ( isChangeable(begin, words[i]) ) {
                myQueue.add(words[i]);
                visited[i] = 1;
            }
        }

        while(!myQueue.isEmpty()){
            String curr = myQueue.remove();
            int idxTarget = Arrays.asList(words).indexOf(target);
            int idxCurr = Arrays.asList(words).indexOf(curr);
            
            if(curr.equals(target)) 
                return visited[ idxTarget]; // 도착하면 리턴
            
            for(int j=0; j<words.length; j++){
                if(visited[j] != 0) continue;
                if(!isChangeable(curr, words[j])) continue;
                visited[j] = visited[idxCurr] + 1;
                myQueue.add(words[j]);

            }
        }
        return 0;
    }
    
    static boolean isChangeable(String curr, String next){
        int diff = 0;

        for ( int i = 0; i < curr.length(); i++ ) {
            if ( curr.charAt(i) != next.charAt(i) )
                diff++;
            if ( diff > 1 )
                return false;
        }
        return true;
    }
    
    
}