import java.util.LinkedList;
import java.util.Queue;
class Solution {
static int solution(String begin, String target, String[] words) {
int answer = 0;
// 1. 단어를 하나씩만 바꾸면서 순차적으로 연결하기.
Queue<Word> q = new LinkedList<>();
q.add(new Word(begin, 0));
while (!q.isEmpty()) {
Word w = q.poll();
begin = w.begin;
if (begin.equals(target)) {
answer = w.cnt;
break;
}
if (w.cnt > words.length) {
break;
}
for (int i = 0; i < words.length; i++) {
if (checkDiff(begin, words[i])) {
q.add(new Word(words[i], w.cnt + 1));
}
}
}
return answer;
}
static boolean checkDiff(String begin, String diff) {
int cnt = 0;
for (int i = 0; i < begin.length(); i++) {
if (begin.charAt(i) != diff.charAt(i)) {
cnt++;
}
if (cnt >= 2) {
return false;
}
}
return true;
}
static class Word {
String begin;
int cnt;
public Word(String begin, int cnt) {
super();
this.begin = begin;
this.cnt = cnt;
}
@Override
public String toString() {
return "[begin=" + begin + ", cnt=" + cnt + "]";
}
}
}