[백준 알고리즘] 11652번 : 카드

이도은·2022년 2월 26일
0

문제

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

준규가 가지고 있는 카드가 주어졌을 때, 가장 많이 가지고 있는 정수를 구하는 프로그램을 작성하시오. 만약, 가장 많이 가지고 있는 정수가 여러 가지라면, 작은 것을 출력한다.

입력

첫째 줄에 준규가 가지고 있는 숫자 카드의 개수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N개 줄에는 숫자 카드에 적혀있는 정수가 주어진다.

출력

첫째 줄에 준규가 가장 많이 가지고 있는 정수를 출력한다.

코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;

public class BOJ_11652 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int num = Integer.parseInt(br.readLine());

        HashMap<Long, Integer> hashMap = new HashMap<>();
        int maxValue = 0;
        long maxKey = 0;
        for (int i = 0; i < num; i++) {
            Long card = Long.parseLong(br.readLine());

            hashMap.put(card, hashMap.getOrDefault(card, 0) + 1);
            if (hashMap.get(card) > maxValue) {
                maxValue = hashMap.get(card);
                maxKey = card;
            } else if (hashMap.get(card) == maxValue) {
                maxKey = Math.min(card, maxKey);
            }
        }
        System.out.println(maxKey);
    }
}

풀이 및 느낀점

해시맵을 사용했다.

먼저 해시맵에 카드의 숫자와 해당하는 숫자 카드의 중복개수를 저장했다.

만약 해시맵에 동일한 카드 숫자가 저장되어 있다면 원래 있던 값에 중복개수를 추가했다. 저장되어있지 않다면 새로운 값을 저장했다.

중복된 카드 숫자의 최대값을 찾기 위해서는 max 변수를 생성했다. 이 변수를 이용해서 이전의 값과 현재 값을 비교했다.

참고자료

0개의 댓글