공부하기/백준

[Java] 백준 풀기 11652 - 카드

XEV 2023. 7. 20. 22:53

자바 백준 11652번

실버 4

https://www.acmicpc.net/problem/11652

 

11652번: 카드

준규는 숫자 카드 N장을 가지고 있다. 숫자 카드에는 정수가 하나 적혀있는데, 적혀있는 수는 -262보다 크거나 같고, 262보다 작거나 같다. 준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 자료 구조, 정렬, 해시를 사용한 집합과 맵

 

 

 

 

 

문제 풀기

입력 받은 데이터의 빈도수를 기록하기 위해서 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

*/