문제 풀이
이 문제는 HashMap으로 풀었다.
쉬울 줄 알았는데 개마니 틀림. ㅜㅜ
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
1. 문제에서 주어진 카드의 개수 N개를 입력 받는다.
Map<Long, Integer> map = new HashMap<Long, Integer>();
for(int i=0; i<N; i++) {
long num = Long.parseLong(bf.readLine());
map.put(num, map.getOrDefault(num, 0) + 1);
}
2. 숫자카드에 적힌 수를 담기 위해 map을 생성했다.
key값에는 카드에 적힌 정수를 담고, value값에는 그 카드를 몇 개 가지고 있는지 담는다.
여기서 주의할 점은 카드에 적힌 수는 -2의 62제곱 ~ 2의 62제곱이기 때문에 int 타입이 아닌 long 타입으로 선언해야한다.
그래서 key값은 Long 타입으로, value 값은 최대 100,000이기 때문에 Integer 타입으로 지정한다.
N번만큼 반복하며 숫자를 입력 받고, map에 넣는다.
long max = Long.MIN_VALUE;
long ans = Long.MAX_VALUE;
for(long tmp: map.keySet()) {
if(map.get(tmp) > max) {
max = map.get(tmp);
ans = tmp;
}else if(map.get(tmp) == max) {
ans = Math.min(ans, tmp);
}
}
3. 우리가 알고 싶은 것은 가장 많이 가지고 있는 정수이다.
일단 가장 많은 정수를 몇 개 가지고 있는지 알기 위해 변수 max를 만든다.
그리고 그 정수는 무엇인지 담기 위해 변수 ans를 만든다.
map의 크기만큼 반복하며 map에 있는 key값 중 가장 큰 값을 max에 담는다.
그리고 그 때 ans를 초기화한다.
문제에서 '가장 많이 가지고 있는 정수가 여러 가지라면 작은 것을 출력하라고 했기 때문에,
else if 조건을 추가해서 현재 비교할 정수와 max 값이 같으면 그 중 더 작은 값으로 ans를 초기화하도록 한다.
System.out.println(ans);
가장 많이 가지고 있는 정수를 출력한다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
Map<Long, Integer> map = new HashMap<Long, Integer>();
for(int i=0; i<N; i++) {
long num = Long.parseLong(bf.readLine());
map.put(num, map.getOrDefault(num, 0) + 1);
}
long max = Long.MIN_VALUE;
long ans = Long.MAX_VALUE;
for(long tmp: map.keySet()) {
if(map.get(tmp) > max) {
max = map.get(tmp);
ans = tmp;
}else if(map.get(tmp) == max) {
ans = Math.min(ans, tmp);
}
}
System.out.println(ans);
}
}
https://www.acmicpc.net/problem/11652
'Algorithm > java' 카테고리의 다른 글
[백준/Java] 1676번 팩토리얼 0의 개수 (1) | 2025.03.13 |
---|---|
[백준/Java] 1202번 보석 도둑 (1) | 2025.03.12 |
[백준/Java] 2841번 외계인의 기타 연주 (1) | 2025.03.08 |
[백준/Java] 20438번 출석체크 (1) | 2025.03.07 |
[백준/Java] 23835번 어떤 우유의 배달목록 (Easy) (1) | 2025.03.06 |