알고리즘 풀이/프로그래머스

[프로그래머스][JAVA] 메뉴 리뉴얼 (List<Map>, 재귀함수로 DFS)

배게 2021. 9. 7. 04:12
728x90

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import java.util.*;
 
class Solution {
    List<Map<String, Integer>> Foodmaps = new ArrayList<>();
        int[] MaxCnt = new int[11];
 
 
    void comb(char[] arr, int pos, StringBuilder sBuilder){
        if(pos>= arr.length){
            if(sBuilder.length()>=2){
                int len = sBuilder.length();
                int cnt = Foodmaps.get(len).getOrDefault(sBuilder.toString(),0)+1;
                Foodmaps.get(len).put(sBuilder.toString(), cnt);
                MaxCnt[len] = (cnt>MaxCnt[len])? cnt:MaxCnt[len];
                }
 
 
 
 
            return;
            }
 
        comb(arr, pos+1, sBuilder.append(arr[pos]));
        sBuilder.setLength(sBuilder.length()-1);
        comb(arr, pos+1, sBuilder);
 
 
 
        }
 
 
    public String[] solution(String[] orders, int[] course) {
 
 
        for(int i=0; i<11; i++)
            Foodmaps.add(new HashMap<String, Integer>());
 
        for(String order : orders){
            char[] arr = order.toCharArray();
            Arrays.sort(arr);
            comb(arr, 0new StringBuilder());
 
            }
 
 
        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);
            }
 
        return answer;
    }
}
cs