문제

programmers 단어 변환 문제 보러가기



풀이

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;
}

위의 부분이 한 번에 한 개의 알파벳만 바꿔야 한다는 조건을 반영한 부분이다.