import java.util.*;
class Solution {
Set<String> set = new HashSet<>();
public void get(String[] alpa, int index, String tmp){
if(index == alpa.length){
String t = tmp.replaceAll(" ","");
set.add(t);
return;
}
for(int i = 0; i< alpa.length; i++){
get(alpa, index+1, tmp+" ");
get(alpa, index+1, tmp+alpa[i]);
}
}
public int solution(String word) {
int answer = 0;
String[] alpa = new String[]{"A","E","I","O","U"};
get(alpa,0,"");
ArrayList<String> combination = new ArrayList<>();
for(String s: set){
combination.add(s);
}
combination.sort(String::compareTo);
return combination.indexOf(word);
}
}
위의 코드에서 제일 중요한 부분은 모음의 조합을 구하는 부분이다. 이를 위해서 가장 중요한 점은
String[] alpa = new String[]{"A","E","I","O","U"};
해당 배열의 인덱스에 해당하는 문자열을 포함 시키는지 포함 하지 않는지에 대해서 모든 탐색이 이루어 져야한다. 따라서
for(int i = 0; i< alpa.length; i++){
get(alpa, index+1, tmp+" ");
get(alpa, index+1, tmp+alpa[i]);
}
위와 같이 전부 탐색하고 난후에 집합에 추가해서 중복된 문자열을 제거 했다. 조합을 구하는 법을 계속 까먹는다 병이다 병....
combination.sort(String::compareTo);
위의 코드에서 볼 수 있듯이 정렬하기 위해서는 compare 함수 혹은 compareTo 함수를 전달해야하므로 함수 참조를 이용해서 해당함수를 전달했다.
이런 유용한 정보를 나눠주셔서 감사합니다.