처음에는 각 alpha를 배열에 넣어 course와 같은 수를 가진 char값을 str로 만들어 반환해줬다. 당연 다 틀려버렸고,,,문제를 다시 읽어보니
음식의 조합을 이용해서 구해야했다.
문제를 푼 과정을 내열해보면
1. 제한사항 4-1 배열의 각 원소에 저장된 문자열 또한 알파벳 오름차순 정렬
2. course 개수만큼 조합 만들어주기
3. 조합들간의 비교를 통해 가장 많은 조합고르기
import java.util.*;
class Solution {
static HashMap<String,Integer> map;
static int[] visited;
public static void combi(String str,StringBuilder combiStr,int index,int depth,int n){
if(depth==n){
map.put(combiStr.toString(),map.getOrDefault(combiStr.toString(),0)+1);
return;
}
for(int i=index;i<str.length();i++){
combiStr.append(str.charAt(i));
combi(str,combiStr,i+1,depth+1,n);
combiStr.delete(depth,depth+1);
}
}
public String[] solution(String[] orders, int[] course) {
ArrayList<String> arr=new ArrayList<>();
// 1번
for(int i=0;i<orders.length;i++){
char[] ch=orders[i].toCharArray();
Arrays.sort(ch);
orders[i]=String.valueOf(ch);
}
// course만큼 반복
for(int i=0;i<course.length;i++){
//조하 저장할 HashMap
map=new HashMap<>();
//주문 목록 반복해서 조합 생성
for(int j=0;j<orders.length;j++){
StringBuilder sb=new StringBuilder();
if(course[i]<=orders[j].length()){
combi(orders[j],sb,0,0,course[i]);
}
}
int max=0;
//가장 많은 조합을 최종적으로 배열에 집어넣음
for(Map.Entry<String,Integer> entry:map.entrySet()){
max=Math.max(max,entry.getValue());
}
for(Map.Entry<String,Integer> entry:map.entrySet()){
if(max>1&&entry.getValue()==max){
arr.add(entry.getKey());
}
}
}
Collections.sort(arr);
String[] answer = new String[arr.size()];
for(int i=0;i<arr.size();i++){
answer[i]=arr.get(i);
}
return answer;
}
}