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
|
import java.util.*;
class Solution {
private static Map<String, Integer> allMap = new HashMap<String, Integer>(); // 코스의 모든 조합 저장
private static Map<Integer, Integer> courseMaxValue = new HashMap<Integer, Integer>(); // 코스의 최대 반복 횟수 저장
public static void makeList(String order, boolean[] include, int k, int n) {
StringBuilder sb = new StringBuilder();
if (n == k) {
for (int i = 0; i < n; i++) {
if (include[i])
sb.append(order.charAt(i));
}
String s = sb.toString();
// 지정된 코스 길이일 경우 저장, 코스를 정렬하여 저장
if (s.length() > 1 && courseMaxValue.containsKey(s.length())) {
char[] arr = s.toCharArray();
Arrays.sort(arr);
s = new String(arr);
allMap.put(s, allMap.getOrDefault(s, 0) + 1);
// 저장된 반복 횟수보다 클 경우, 해당 횟수 저장
if (courseMaxValue.get(s.length()) < allMap.get(s))
courseMaxValue.put(s.length(), allMap.get(s));
}
return;
}
include[k] = false;
makeList(order, include, k + 1, n);
include[k] = true;
makeList(order, include, k + 1, n);
}
public String[] solution(String[] orders, int[] course) {
String[] answer = {};
int i;
// 코스의 길이 초기화
for (i = 0; i < course.length; i++) {
courseMaxValue.put(course[i], 0);
}
// 코스의 모든 조합 저장
for (i = 0; i < orders.length; i++) {
boolean[] include = new boolean[orders[i].length()];
makeList(orders[i], include, 0, orders[i].length());
}
List<String> list = new ArrayList<String>();
// 반복 횟수가 2회 이상이면서 최대로 반복된 코스일 경우 저장
for (String key : allMap.keySet()) {
if (courseMaxValue.get(key.length()) > 1 && allMap.get(key) == courseMaxValue.get(key.length()))
list.add(key);
}
Collections.sort(list);
answer = new String[list.size()];
for (i = 0; i < list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
|
cs |
코스의 멱집합을 오름차순으로 정렬하여 map에 추가하였다.
이 후 최대로 반복된 코스를 반환하였다.
'Programmers > Level2' 카테고리의 다른 글
괄호 회전하기 (0) | 2021.08.04 |
---|---|
쿼드압축 후 개수 세기 (0) | 2021.08.03 |
숫자의 표현 (0) | 2021.08.03 |
방문 길이 (0) | 2021.08.02 |
최솟값 만들기 (0) | 2021.08.02 |