https://school.programmers.co.kr/learn/courses/30/lessons/84512?language=java
A, E, I, O, U 5개의 모음으로 (각 모음을 사용하지 않거나, 1번 이상 사용하여) 길이 5이하의 단어를 만드는 문제다.
이후 정렬하여 몇 번째 단어인지 출력하면 된다.
1번째 는 A고 3095번째 단어는 UUUU였다. 코드에선 빈 문자열 ""가 0번째 인덱스를 채우면서 A가 1번째가 됐다.
xxEIO와 xEIOx같은 경우는 문제에서 동일한 단어로 취급되므로 정확한 경우의 수를 구하긴 어려웠다. 그래서 set으로 검산하고 제출했다.
import java.util.*;
class Solution {
public int solution(String word) {
List<String> list = new ArrayList<>();
char[] arr = {'A','E','I','O','U'};
reclu(arr, list, "", 0);
Collections.sort(list);
// Set<String> tmp = new HashSet<>();
// list.stream().forEach(v -> tmp.add(v));
// System.out.println(tmp.size()); // 3906
// System.out.println(list.size()); // 3906
return list.indexOf(word);
}
public static void reclu(char[] arr, List<String> list, String s, int dep) {
list.add(s);
if(dep == 5) return;
for(int i=0; i<5; i++) {
reclu(arr, list, s+arr[i], dep+1);
}
}
}
'[프로그래머스] 절대 외부 IDE를 써선 안돼 > Java' 카테고리의 다른 글
[lv3] 야근 지수 (0) | 2024.11.04 |
---|---|
[lv3] 입국심사 (0) | 2024.10.19 |
[lv2] 전력망을 둘로 나누기 (1) | 2024.10.16 |
[lv2] 등굣길 (0) | 2024.10.15 |
[lv3] 가장 먼 노드 (2) | 2024.10.11 |