[알고리즘] 메뉴 리뉴얼 level2

Jifrozen·2022년 11월 22일
0

Algorithm

목록 보기
62/70

문제


처음에는 각 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;
    }
}

0개의 댓글