Repository navigation
Expand file tree
/
Copy pathSolution_메뉴_리뉴얼.java
More file actions
56 lines (46 loc) · 1.63 KB
/
Copy pathSolution_메뉴_리뉴얼.java
File metadata and controls
56 lines (46 loc) · 1.63 KB
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
package algorithm.programmers.Java;
import java.util.*;
class Solution_메뉴_리뉴얼 {
static char[] visited;
static Map<String, Integer>[] mapList;
static int[] maxCnt;
public String[] solution(String[] orders, int[] course) {
mapList = new Map[11];
maxCnt = new int[11];
Arrays.fill(maxCnt, 2);
for(int i = 0; i < 11; i++) {
mapList[i] = new HashMap<>();
}
for(String orderS : orders) {
for(int num : course) {
if(num > orderS.length()) continue;
char[] order = orderS.toCharArray();
Arrays.sort(order);
visited = new char[num];
conbination(order, num, 0, 0);
}
}
List<String> courseList = new ArrayList<>();
for(int num : course) {
for(Map.Entry<String, Integer> entry : mapList[num].entrySet()) {
if(entry.getValue() == maxCnt[num]) {
courseList.add(entry.getKey());
}
}
}
Collections.sort(courseList);
return courseList.toArray(new String[0]);
}
static void conbination(char[] order, int num, int cnt, int idx) {
if(num == cnt) {
String string = String.valueOf(visited);
mapList[num].put(string, mapList[num].getOrDefault(string, 0) + 1);
maxCnt[num] = Math.max(maxCnt[num], mapList[num].get(string));
return;
}
for(int i = idx; i < order.length; i++) {
visited[cnt] = order[i];
conbination(order, num, cnt + 1, i + 1);
}
}
}