Algorithm PS/Baekjoon Online Judge
[BOJ/백준] 11652 카드 (S4)
kyung.Kh
2024. 5. 12. 19:56
문제
https://www.acmicpc.net/problem/11652
풀이
카드에 적힌 수와 적힌 수의 카드의 개수를 저장해야 하므로 HashMap을 사용했다.
가지고 있는 수면 개수만 +1해서 저장하고, 없는 카드면 카드 번호와 1을 해시맵에 저장하도록 하였다.
그리고 매 반복마다 해당 카드에 대한 개수를 확인해서 개수가 최대인 카드를 result에 저장했다.
만약 가장 많이 갖고 있는 카드가 여러가지라면 Math.min()으로 작은 것을 저장하도록 하였다.
문제를 보면 "숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -2^{62}보다 크거나 같고, 2^{62}보다 작거나 같다." 라고 되어있으므로 타입을 long 타입으로 해야 한다.
Code
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
HashMap<Long, Integer> map = new LinkedHashMap<>();
int max = 0;
long result = 0;
for (int i = 0; i < N; i++) {
long card = Long.parseLong(br.readLine());
if (map.containsKey(card)) {
map.put(card, map.get(card) + 1);
} else {
map.put(card, 1);
}
if (map.get(card) > max) { // result에 가장 많은 카드의 번호 저장하고, max에 가장 많은 카드 개수 저장
result = card;
max = map.get(card);
} else if (map.get(card) == max) { // 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.
result = Math.min(card, result);
}
}
System.out.println(result);
}
}
728x90