https://school.programmers.co.kr/learn/courses/30/lessons/43163
import java.util.*;
class Solution {
public int answer = 10000000;
public int solution(String begin, String target, String[] words) {
boolean[] visit = new boolean[words.length];
boolean exist = false;
for(int i = 0; i < words.length; ++i)
{
if(target.equals(words[i]))
exist = true;
}
if(false == exist)
return 0;
dfs(0, begin, target, words, visit);
return answer;
}
public void dfs(int depth, String begin, String target, String[] words, boolean[] visit)
{
if(begin.equals(target))
{
answer = Math.min(answer, depth);
return;
}
for(int i = 0; i < words.length; ++i)
{
if(visit[i])
continue;
if(changeble(begin, words[i]))
{
visit[i] = true;
dfs(depth+1, words[i], target, words, visit);
visit[i] = false;
}
}
}
public boolean changeble(String a, String b)
{
int count = 0;
for(int i = 0; i < a.length(); ++i)
{
if(a.charAt(i) != b.charAt(i))
{
count++;
}
if(count>1)
break;
}
if(count > 1)
return false;
else
return true;
}
}