문제
풀이
class Solution {
static int min;
static String[] staticWords;
static String staticTarget;
static boolean[] used;
public int solution(String begin, String target, String[] words) {
boolean flag = false;
for (String str : words) {
if (str.equals(target)) {
flag = true;
break;
}
}
if (!flag)
return 0;
staticTarget = target;
staticWords = words;
used = new boolean[words.length];
min = Integer.MAX_VALUE;
dfs(begin, 0);
return min;
}
static void dfs(String begin, int cnt) {
if (begin.equals(staticTarget)) {
min = min < cnt ? min : cnt;
return;
}
char[] begin_to_char = begin.toCharArray();
char[] next_to_char = new char[begin.length()];
for (int n = 0; n < staticWords.length; n++) {
if(!used[n]) {
next_to_char = staticWords[n].toCharArray();
int wrong = 0;
for (int i = 0; i < begin_to_char.length; i++) {
if (begin_to_char[i] != next_to_char[i])
wrong++;
}
if (wrong == 1) {
used[n] = true;
dfs(staticWords[n], cnt + 1);
used[n] = false;
}
}
}
}
}
문제점 해결
DFS로 풀 수 있는 문제였다. 문제에 나와있는 조건에만 유의한다면 쉽게 풀 수 있는 문제였다.
if (wrong == 1) {
used[n] = true;
dfs(staticWords[n], cnt + 1);
used[n] = false;
}
위의 부분이 한 번에 한 개의 알파벳만 바꿔야 한다는 조건을 반영한 부분이다.