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 문제
해쉬에 학생 별 맞춘 문제수를 넣고 내림차순 정렬한 뒤 맞춘 최대값과 같은 학생들만 우선순위 큐에 담았다. (맞춘 문제수가 같으면 학생을 오름차순으로 담아야하기 때문)
큐 사이즈만큼 배열을 선언해주고 담으면 끝 !!!~~~