문제
https://programmers.co.kr/learn/courses/30/lessons/43163
풀이
DFS 알고리즘을 이용해서 풀었다.
중복 체크는 HashSet<String>을 사용하였다.
dfs 함수 호출 후, 다시 visitied에 해당 값을 제거해줘야 한다.
소스코드
import java.util.*;
import java.lang.*;
class Solution {
public int answer;
public boolean flag;
public String begin;
public String target;
public String[] words;
public HashSet<String> visited;
public int solution(String begin, String target, String[] words) {
this.answer = Integer.MAX_VALUE;
this.visited = new HashSet<String>();
this.begin = begin;
this.target = target;
this.words = words;
visited.add(begin);
dfs(begin, 0);
return flag ? answer: 0;
}
public void dfs(String bf, int cnt){
if(target.equals(bf)){
answer = Math.min(cnt, answer);
flag = true;
return;
}
for(String af : words){
if(canConvert(bf, af) && !visited.contains(af)){
visited.add(af);
dfs(af, cnt+1);
visited.remove(af);
}
}
}
public boolean canConvert(String bf, String af){
int count = 0;
for(int i = 0; i < bf.length(); i++){
if(bf.charAt(i) == af.charAt(i)) count++;
}
return count == bf.length()-1 ? true: false;
}
}
'💡Problem Solving > Programmers' 카테고리의 다른 글
[프로그래머스] 단속카메라 (Java) (0) | 2021.11.02 |
---|---|
[프로그래머스] 여행경로 (Java) (0) | 2021.11.02 |
[프로그래머스] 합승 택시 요금 (Java) (0) | 2021.10.31 |
[프로그래머스] 멀리 뛰기 (Java) (0) | 2021.10.29 |
[프로그래머스] 입국심사 (Java) (0) | 2021.10.29 |