[프로그래머스] 코딩테스트 연습 - 깊이/너비 우선 탐색(DFS/BFS) Level 3 단어 변환

uoahy·2021년 9월 23일
0

Solution.java

import java.util.*;

class Solution {
    public int solution(String begin, String target, String[] words) {
        int answer = 0;
        
        Queue<Data> que = new LinkedList<>();        
        boolean[] visited = new boolean[words.length];
        
        for (int i = 0; i < words.length; i++) {
            int diff = 0;
            for (int j = 0; j < words[i].length(); j++) {
                if (words[i].charAt(j) != begin.charAt(j)) {
                    diff++;
                }
            }
            
            if (diff == 1) {
                visited[i] = true;
                que.add(new Data(i, 1));
            }
        }
        
        while (!que.isEmpty()) {
            Data data = que.poll();
            
            if (words[data.i].equals(target)) {
                answer = data.count;
                break;
            }
            
            for (int i = 0; i < words.length; i++) {
                if (!visited[i]) {
                    int diff = 0;
                    for (int j = 0; j < words[i].length(); j++) {
                        if (words[i].charAt(j) != words[data.i].charAt(j)) {
                            diff++;
                        }
                    }
                    
                    if (diff == 1) {
                        visited[i] = true;
                        que.add(new Data(i, data.count + 1));
                    }
                }
            }
        }
        
        return answer;
    }
}

class Data {
    int i;
    int count;
    
    Data (int i, int count) {
        this.i = i;
        this.count = count;
    }
}

단순한 BFS 문제였는데 계속 이상하게 생각해서 푸는데 오래걸렸다..

다음부턴 문제 분석을 잘해야겠다.

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

0개의 댓글