[완전탐색] 모의고사

서은경·2022년 4월 19일
0

CodingTest

목록 보기
12/71
public static int[] solution(int[] answers) {
        int[] answer = {};

        int[][] students = {{1, 2, 3, 4, 5},{2, 1, 2, 3, 2, 4, 2, 5},{3, 3, 1, 1, 2, 2, 4, 4, 5, 5}};

        HashMap<Integer, Integer> hm = new HashMap<>();

        for (int i = 0; i < students.length; i++) {
            for (int j = 0; j < answers.length; j++) {
                if (students[i][j%(students[i].length)] == answers[j]) {
                    hm.put((i+1), hm.getOrDefault((i+1), 0)+1);
                } else {
                    hm.put((i + 1), hm.getOrDefault((i+1), 0));
                }
            }
        }

        List<Integer> keySet = new ArrayList<>(hm.keySet());
        Collections.sort(keySet, (value1, value2) -> (hm.get(value2).compareTo(hm.get(value1))));

        System.out.println(keySet);

        PriorityQueue<Integer> pq = new PriorityQueue<>();

            int max = hm.get(keySet.get(0));            // 젤 많이 맞춘 애가 맞춘 갯수
            for (int n : hm.keySet()) {
                if (max == hm.get(n)) {
                    System.out.println(max + " student" + n + " 바로 최대값");
                    pq.add(n);
                } else {
                    System.out.println(hm.get(n) + " student" + n + " 안최대값");
                }
            }

            answer = new int[pq.size()];
            int idx = 0;
            while (!pq.isEmpty()) {
                answer[idx] = pq.poll();
                idx++;
            }

        return answer;
    }

답의 배열 길이를 처음에 고려 못해서 런타임 에러가 났었는데 그 부분 인지하고 나선 금방 푼 난이도 1 문제
해쉬에 학생 별 맞춘 문제수를 넣고 내림차순 정렬한 뒤 맞춘 최대값과 같은 학생들만 우선순위 큐에 담았다. (맞춘 문제수가 같으면 학생을 오름차순으로 담아야하기 때문)
큐 사이즈만큼 배열을 선언해주고 담으면 끝 !!!~~~

0개의 댓글

관련 채용 정보