[Programmers] : 2021 KAKAO > 메뉴 리뉴얼 > JAVA

🔗 문제

https://programmers.co.kr/learn/courses/30/lessons/72411?language=java 

 

코딩테스트 연습 - 메뉴 리뉴얼

레스토랑을 운영하던 스카피는 코로나19로 인한 불경기를 극복하고자 메뉴를 새로 구성하려고 고민하고 있습니다. 기존에는 단품으로만 제공하던 메뉴를 조합해서 코스요리 형태로 재구성해서

programmers.co.kr

내코드

package com.kyhslam.programmers.kakao;

import java.util.*;

public class cp01 {

    private static List<Map<String, Integer>> FoodMaps = new ArrayList<>();
    private static int[] MaxCnt = new int[11];


    public static void main(String[] args) {
        String[] orders = {"ABCFG", "AC"};
        int[] course = {2,3,4};

        for (int i=0; i < 11; i++) {
            FoodMaps.add(new HashMap<String, Integer>());
        }

        for (String str : orders) {
            char[] arr = str.toCharArray();
            Arrays.sort(arr);
            //System.out.println("arr = " + arr);

            comb(arr, 0, new StringBuilder());
        }

        System.out.println("FoodMaps = " + FoodMaps);

        List<String> list = new ArrayList<>();
        for(int len : course) {
            for (Map.Entry<String, Integer> entry : FoodMaps.get(len).entrySet()) {
                if (entry.getValue() >= 2 && entry.getValue() == MaxCnt[len]) {
                    list.add(entry.getKey());
                }
            }
        }

        Collections.sort(list);

        String[] answer = new String[list.size()];
        for (int i = 0; i < list.size(); i++) {
            answer[i] = list.get(i);
        }
        System.out.println(Arrays.toString(answer));
    }

    private static void comb(char[] str, int pos, StringBuilder candi) {

        if(pos >= str.length){
            int len = candi.length();
            if(len >= 2){
                int cnt = FoodMaps.get(len).getOrDefault(candi.toString(),0) + 1;
                FoodMaps.get(len).put(candi.toString(), cnt);
                MaxCnt[len] = Math.max(MaxCnt[len], cnt);
            }

            return;
        }

        comb(str, pos+1, candi.append(str[pos]));
        candi.setLength(candi.length()-1);
        comb(str, pos+1, candi);
    }

}

 

 

다른사람

import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.Arrays;
class Solution {
       static HashMap<String,Integer> map;
    static int m;
    public String[] solution(String[] orders, int[] course) {
       PriorityQueue<String> pq = new PriorityQueue<>();
        for (int i=0;i<course.length;i++){
            map = new HashMap<>();
            m=0;
            for (int j=0;j<orders.length;j++) {
                find(0, "", course[i], 0, orders[j]);
            }
            for (String s : map.keySet()){
                if (map.get(s)==m&&m>1){
                    pq.offer(s);
                }
            }
        }
        String  ans[] = new String[pq.size()];
        int k=0;
        while (!pq.isEmpty()){
            ans[k++] = pq.poll();
        }
        return ans;
    }
    static void find(int cnt,String str,int targetNum,int idx,String word){
        if (cnt==targetNum){
            char[] c = str.toCharArray();
            Arrays.sort(c);
            String temps="";
            for (int i=0;i<c.length;i++)temps+=c[i];
            map.put(temps,map.getOrDefault(temps,0)+1);
            m = Math.max(m,map.get(temps));
            return;
        }
        for (int i=idx;i<word.length();i++){
            char now =word.charAt(i);
            find(cnt+1,str+now,targetNum,i+1,word);
        }
    }
}

댓글

Designed by JB FACTORY