프로그래머스-단어 변환

이호영·2022년 4월 9일
0
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 + "]";
		}
	}
}

0개의 댓글