알고리즘 풀이/프로그래머스
[프로그래머스][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, 0, new 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 |