728x90
반응형
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/43163
class Solution {
int answer = Integer.MAX_VALUE;
boolean[] converted;
public int solution(String begin, String target, String[] words) {
converted = new boolean[words.length];
dfs(begin, target, words, 0);
// answer이 바뀌지 않았다면 return 0
if(answer == Integer.MAX_VALUE) {
answer = 0;
}
return answer;
}
public void dfs(String word, String target, String[] words, int cnt) {
if(word.equals(target)) {
// 최소값일 경우 answer 갱신
answer = Math.min(cnt, answer);
return;
}
for(int i=0; i<words.length; i++) {
// 겹치는 단어 수
String w = words[i];
int notDuplicated = 0;
for(int j=0; j<word.length(); j++) {
if(word.charAt(j) != w.charAt(j)) {
notDuplicated++;
if(notDuplicated >= 2) {
// 두 글자 이상 겹치면 break
break;
}
}
}
if(notDuplicated == 1 && !converted[i]) {
converted[i] = true;
dfs(w, target, words, cnt+1);
converted[i] = false;
}
}
}
}
728x90
반응형
'알고리즘 > 문제 풀이 (출처: 프로그래머스)' 카테고리의 다른 글
[JAVA/BFS] 숫자 변환하기 (0) | 2024.05.07 |
---|---|
[JAVA] 붕대 감기 (0) | 2024.02.24 |
[JAVA/DFS] 여행경로 (0) | 2024.02.24 |
[JAVA/DFS] 네트워크 (0) | 2024.02.23 |
[JAVA/BFS] 가장 먼 노드 (0) | 2024.02.23 |