https://www.acmicpc.net/problem/11652
문제 분석
분류
문제 설명
준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -2의62승보다 크거나 같고, 2의62승보다 작거나 같다.
준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.
입력
첫째 줄에 준규가 가지고 있는 숫자 카드의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 숫자 카드에 적혀있는 정수가 주어진다.
출력
첫째 줄에 준규가 가장 많이 가지고 있는 정수를 출력한다.
소스코드
import java.io.*;
import java.util.*;
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());
Map<Long, Integer> map = new HashMap<>();
for (int i = 0; i < n; i++) {
long m = Long.parseLong(br.readLine());
map.put(m, map.getOrDefault(m, 0) + 1);
}
int max = -1;
long num = 0;
for (long l : map.keySet()) {
if (map.get(l) > max) {
max = map.get(l);
num = l;
} else if (map.get(l) == max) {
num = Math.min(l, num);
}
}
System.out.println(num);
}
}
문제풀이
- BufferReader 사용해 총 카드의 수를 받는다.
- 여기서 주의할 점은 카드에 적혀있는 수의 범위가 매우 크다.
- long자료형을 활용해 선언해준 Map에 카드에 적힌 수를 key로 가지고 있는 개수를 value로 저장해줘 나올 때 마다 value를 늘려준다.
- max변수에 Map value가 가장 큰 key를 브루트포스로 판단해준다.
- 가장 많이 가진게 여러가지면 가장 작은 수를 알려줘야하므로 max와 같은 value가 나온다면 더 작은 수를 판단해줘 다시 저장해준다.
'Koala - 14기 > 기초 알고리즘 스터디' 카테고리의 다른 글
[백준/Python] 1051번 숫자 정사각형 (0) | 2024.04.07 |
---|---|
[백준 / c++] 3986 (0) | 2024.04.07 |
[백준/Java] 1302번 : 베스트셀러 (0) | 2024.03.31 |
[백준/Python] 3059번: 등장하지 않는 문자의 합 (0) | 2024.03.31 |
[백준/Python] 1813번 논리학 교수 (0) | 2024.03.31 |