https://programmers.co.kr/learn/courses/30/lessons/43163?language=java
๋ฌธ์
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ์์ต๋๋ค. ์๋์ ๊ฐ์ ๊ท์น์ ์ด์ฉํ์ฌ begin์์ target์ผ๋ก ๋ณํํ๋ ๊ฐ์ฅ ์งง์ ๋ณํ ๊ณผ์ ์ ์ฐพ์ผ๋ ค๊ณ ํฉ๋๋ค.
1. ํ ๋ฒ์ ํ ๊ฐ์ ์ํ๋ฒณ๋ง ๋ฐ๊ฟ ์ ์์ต๋๋ค.
2. words์ ์๋ ๋จ์ด๋ก๋ง ๋ณํํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด begin์ด "hit", target๊ฐ "cog", words๊ฐ ["hot","dot","dog","lot","log","cog"]๋ผ๋ฉด "hit" -> "hot" -> "dot" -> "dog" -> "cog"์ ๊ฐ์ด 4๋จ๊ณ๋ฅผ ๊ฑฐ์ณ ๋ณํํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ๋จ์ด begin, target๊ณผ ๋จ์ด์ ์งํฉ words๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์ต์ ๋ช ๋จ๊ณ์ ๊ณผ์ ์ ๊ฑฐ์ณ begin์ target์ผ๋ก ๋ณํํ ์ ์๋์ง return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- ๊ฐ ๋จ์ด๋ ์ํ๋ฒณ ์๋ฌธ์๋ก๋ง ์ด๋ฃจ์ด์ ธ ์์ต๋๋ค.
- ๊ฐ ๋จ์ด์ ๊ธธ์ด๋ 3 ์ด์ 10 ์ดํ์ด๋ฉฐ ๋ชจ๋ ๋จ์ด์ ๊ธธ์ด๋ ๊ฐ์ต๋๋ค.
- words์๋ 3๊ฐ ์ด์ 50๊ฐ ์ดํ์ ๋จ์ด๊ฐ ์์ผ๋ฉฐ ์ค๋ณต๋๋ ๋จ์ด๋ ์์ต๋๋ค.
- begin๊ณผ target์ ๊ฐ์ง ์์ต๋๋ค.
- ๋ณํํ ์ ์๋ ๊ฒฝ์ฐ์๋ 0๋ฅผ return ํฉ๋๋ค.
ํ์ด
DFS๋ก ํด๊ฒฐโผ๏ธ
์ฐ์ words ์ target ์ด ์๋ค๋ฉด ๐ return 0;
ํ ๋ฒ์ ํ๋์ ์ํ๋ฒณ๋ง ๋ณํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ๋จ์ด์ ์ฐจ์ด๊ฐ 2์ด์์ด๋ผ๋ฉด PASSโผ๏ธ
์ด๋ฐ ์์ผ๋ก ๋ฐ๊ฟ๊ฐ๋ฉด์ ํ์๊ฐ ๊ฐ์ฅ ์์ ๊ฐ์ return ํ๋ค.๐โ๏ธ
์ฝ๋
import java.util.*;
public class ๋จ์ด๋ณํ {
static boolean[] isVisited;
static int answer;
public static int solution(String begin, String target, String[] words) {
answer = 9999999;
isVisited = new boolean[words.length];
List<String> tmp = Arrays.asList(words);
if(!tmp.contains(target))
return 0;
DFS(words, begin, target, 0);
return answer;
}
private static void DFS(String[] words, String now, String target, int cnt) {
if(now.equals(target)){
answer = Math.min(answer, cnt);
return;
}
for(int i = 0; i < words.length; i++){
// ๋ค๋ฅธ ๋ฌธ์ ์
int diff = 0;
if(isVisited[i])
continue;
for(int j = 0 ; j < words[i].length() ; j++){
if(now.charAt(j) != words[i].charAt(j))
diff++;
if(diff > 1)
break;
}
// ํ๋๋ง ์ฐจ์ด๋๋ฉด ๋ณ๊ฒฝ
if(diff == 1){
isVisited[i] = true;
DFS(words, words[i], target, cnt+1);
isVisited[i] = false;
}
}
}
public static void main(String[] args) {
String[] words = {"hot", "dot", "dog", "lot", "log"};
System.out.println(solution("hit", "cog", words));
}
}
'์๊ณ ๋ฆฌ์ฆ > ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๊ฒฝ์ฃผ๋ก ๊ฑด์ค (0) | 2021.09.30 |
---|---|
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ํฉ์น ํ์ ์๊ธ (0) | 2021.09.30 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ๋ฑ๊ตฃ๊ธธ (0) | 2021.09.29 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] ์ด์ค์ฐ์ ์์ํ (0) | 2021.09.29 |
[ ํ๋ก๊ทธ๋๋จธ์ค / Programmers Level 3 ] 2 X n ํ์ผ๋ง (0) | 2021.09.28 |