728x90
반응형
문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/43163
코딩테스트 연습 - 단어 변환
두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수
programmers.co.kr
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 |