🧑🏻💻 문제

- "A E I O U" 에 대한 문자들만 이용하여, 길이 '5' 이하의 모든 단어를 만들고
문제에서 원하는 단어가 몇번째에 있는지 구해라.
HashSet
- 주어진 문자로 조합을 만들었을 때 중복 되는 문자들은 불필요하므로
HashSet
을 이용하여 중복 단어를 제거한다.
LinkedHashSet
- 문자들이 사전 순서대로 정렬되어 있기 때문에, 조합 할 때 생성된 문자의 순서도 함께 저장되어야 하므로 순서가 보장되도록
Linked
를 이용한다.
💡 풀이
- dfs 재귀를 활용하여 모든 단어의 조합을 생성하고 (단어의 길이가 5가 초과되는 순간 return),
- 생성된 단어들을
LinkedHashSet
에 담아 순서가 보장되고 중복이 제거된 단어들을 만든다.
- 문제에서 주어진 단어를 찾아 인덱스 값을 return 한다. (Iterator 활용)
import java.util.*;
class Solution {
static Set<String> set = new LinkedHashSet<>();
private static void dfs(String str, String words) {
if (str.length() == 6) return;
if (!str.isEmpty()) set.add(str);
for (int i = 0; i < 5; i++) {
dfs(str + words.charAt(i), words);
}
}
public int solution(String word) {
String words = "AEIOU";
dfs("", words);
Iterator<String> it = set.iterator();
int cnt = 0;
while(it.hasNext()) {
cnt += 1;
if (it.next().equals(word)) break;
}
return cnt;
}
}