본문 바로가기

Programmers/Level2

메뉴 리뉴얼

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