DFS는 가능한 한 깊게 탐색한 후, 더 이상 깊게 갈 수 없으면 다음 경로로 이동하는 방식으로 작동한다.
DFS의 주요 특징과 동작 방식은 다음과 같다:
주요 특징
동작 방식
DFS의 응용
오늘의 문항은 한 분기점을 선택한후 그 곳에서 가능한 깊게 들어가는 방식이기 때문에 dfs라고 할 수 있겠다. 따라서 재귀적인 호출을 이용하여 dfs를 구현하였다.
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
제한사항
import java.util.*;
class Solution {
private static String[] vowels = {"A", "E", "I", "O", "U"};
private static ArrayList<String> list;
public static int solution(String word){
int answer = 0;
list = new ArrayList<>();
dfs("", 0);
int size = list.size();
for(int i=0; i<size; i++){
if(list.get(i).equals(word)){
answer = i;
break;
}
}
return answer;
}
public static void dfs(String word, int len){
list.add(word);
if(len == 5) return;
for(int i=0; i<5; i++){
dfs(word + vowels[i], len+1);
}
}
}
무조건 dfs로 구현한 내 풀이와는 달리 어떤 사람은 아예 수학적으로 접근한 풀이도 있었다. 이런 방식도 존재한다는 것을 알아두자.
class Solution {
public int solution(String word) {
int answer = 0, per = 3905;
for(String s : word.split("")) answer += "AEIOU".indexOf(s) * (per /= 5) + 1;
return answer;
}
}