자바 백준 11652번
실버 4
https://www.acmicpc.net/problem/11652
문제 보기
분류: 자료 구조, 정렬, 해시를 사용한 집합과 맵
문제 풀기
입력 받은 데이터의 빈도수를 기록하기 위해서 HashMap을 이용한다. key는 입력으로 들어오는 숫자이고, value는 입력된 숫자의 횟수이다.
main과 findMostFrequentNumber으로 메서드를 분리하였고 따라서 입력값을 ArrayList에 따로 저장하여 넘겨준다.
HashMap을 생성하고 key는 Long, value는 Integer 타입으로 지정한다. 그리고 최댓값과 최대 빈도수를 저장할 변수를 생성한다.
for each를 통해 입력된 번호를 하나씩 확인하며, getOrDefault() 를 사용하여 입력된 번호가 존재하지 않으면 HashMap에 새롭게 지정하고 번호가 존재하면 기존 번호에 빈도수를 증가시킨다.
조건문을 통해 새로 확인하는 수의 빈도가 이전 최대 빈도보다 높거나 또는 빈도수는 같으면서 그 값이 이전 최대치보다 작으면 최대 번호와 최대 빈도수를 업데이트해준다.
입력된 모든 수의 확인이 끝나면 key값인 그 수를 출력한다.
코드 보기
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
sc.nextLine();
List<Long> numbers = new ArrayList<>();
for (int i = 0; i < N; i++) {
long number = sc.nextLong();
numbers.add(number);
}
long mostFrequentNumber = findMostFrequentNumber(numbers);
System.out.print(mostFrequentNumber);
}
private static long findMostFrequentNumber(List<Long> numbers) {
HashMap<Long, Integer> countMap = new HashMap<>();
long maxNumber = 0;
int maxCount = 0;
for (long number : numbers) {
int count = countMap.getOrDefault(number, 0) + 1;
countMap.put(number, count);
if (count > maxCount || (count == maxCount && number < maxNumber)) {
maxCount = count;
maxNumber = number;
}
}
return maxNumber;
}
}
/*
- input
5
4611686018427390001
2
1
4611686018427390000
4611686018427390000
- output
4611686018427390000
*/
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 1485 - 정사각형 (0) | 2023.07.22 |
---|---|
[Java] 백준 풀기 15904 - UCPC는 무엇의 약자일까? (0) | 2023.07.21 |
[Java] 백준 풀기 11557 - Yangjojang of The Year (0) | 2023.07.19 |
[Java] 백준 풀기 11726 - 2xN 타일링 (0) | 2023.07.18 |
[Java] 백준 풀기 2530 - 인공지능 시계 (0) | 2023.07.17 |