Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

csct3434

[level 2] 메뉴 리뉴얼 - 72411 본문

프로그래머스

[level 2] 메뉴 리뉴얼 - 72411

csct3434 2024. 2. 29. 03:27

문제 링크

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map.Entry;

class Solution {

    public String[] solution(String[] orders, int[] course) {
        HashMap<String, Integer> combinations = new HashMap<>();

        for (String order : orders) {
            for (int mask = 1; mask < (1 << order.length()); mask++) {
                int finalMask = mask;
                if (Arrays.stream(course).noneMatch(c -> Integer.bitCount(finalMask) == c)) {
                    continue;
                }

                StringBuilder sb = new StringBuilder();
                for (int i = 0; i < order.length(); i++) {
                    if ((mask & (1 << i)) != 0) {
                        sb.append(order.charAt(i));
                    }
                }

                char[] foods = sb.toString().toCharArray();
                Arrays.sort(foods);
                String combination = new String(foods);
                combinations.put(combination, combinations.getOrDefault(combination, 0) + 1);
            }
        }

        HashMap<Integer, Integer> maxCount = new HashMap<>();
        for (String combination : combinations.keySet()) {
            int length = combination.length();
            int count = combinations.get(combination);

            maxCount.put(length, Math.max(maxCount.getOrDefault(length, 0), count));
        }

        List<String> answer = new LinkedList<>();
        for (Entry<String, Integer> entry : combinations.entrySet()) {
            String combination = entry.getKey();
            int count = entry.getValue();

            if (count > 1 && maxCount.get(combination.length()) == count) {
                answer.add(combination);
            }
        }

        Collections.sort(answer);
        return answer.toArray(new String[0]);
    }
}