프로그래머스 > 코딩테스트 연습 > 깊이/너비 우선 탐색(DFS/BFS) > 단어 변환
import java.util.*;
class Solution {
public int solution(String begin, String target, String[] words) {
boolean value = false;
for (int i = 0; i < words.length; i++) {
if (words[i].equals(target)) {
value = true;
break;
}
}
if (!value) return 0;
ArrayList<char[]> list = new ArrayList<>();
for (int i = 0; i < words.length; i++) {
list.add(words[i].toCharArray());
}
char[] base = target.toCharArray();
Queue<word> q = new LinkedList<>();
q.add(new word(0, begin.toCharArray()));
while (!q.isEmpty()) {
word w = q.poll();
char[] temp = w.list;
int index = w.index;
if (check(base, temp) == 0) return index;
for (int i = 0; i < list.size(); i++) {
char[] data = list.get(i);
if (check(temp, data) == 1) q.add(new word(index+1, list.remove(i)));
}
}
return 0;
}
public int check(char[] a, char[] b) {
int count = a.length;
for (int i = 0; i < a.length; i++) {
if (a[i] == b[i]) count--;
}
return count;
}
}
class word {
int index;
char[] list;
public word (int i, char[] list) {
this.index = i;
this.list = Arrays.copyOf(list, list.length);
}
}
테스트 1 〉 통과 (0.50ms, 83.1MB)
테스트 2 〉 통과 (0.40ms, 81.9MB)
테스트 3 〉 통과 (0.53ms, 69.9MB)
테스트 4 〉 통과 (0.39ms, 74.8MB)
테스트 5 〉 통과 (0.02ms, 75MB)
boolean value = false; for (int i = 0; i < words.length; i++) { if (words[i].equals(target)) { value = true; break; } } if (!value) return 0;
ArrayList<char[]> list = new ArrayList<>(); for (int i = 0; i < words.length; i++) { list.add(words[i].toCharArray()); }
char[] base = target.toCharArray();
Queue<word> q = new LinkedList<>();
q.add(new word(0, begin.toCharArray()));
while (!q.isEmpty()) { --중략-- }
word w = q.poll(); char[] temp = w.list; int index = w.index;
if (check(base, temp) == 0) return index;
for (int i = 0; i < list.size(); i++) { char[] data = list.get(i); if (check(temp, data) == 1) q.add(new word(index+1, list.remove(i))); }
BFS로 비교적 간단하게 풀었음