백준 자바 문제풀이 #11652

JHLEE·2022년 12월 15일

카드

실버 4인데도 정답비율이 엄청 낮아서 괜히 긴장했다.

Map에 대해 알고있으면 풀 수 있는 기본적인 문제다.

다만, 수의 범위를 조심해야 한다.

자료형범위
int231-2^{31} ~ 23112^{31}-1
long263-2^{63} ~ 26312^{63}-1

주어진 범위는 int형을 넘기에 long형을 사용해야 한다.

풀이 순서는 다음과 같다.

  1. 숫자 별 카드의 개수를 세기
  2. 개수가 제일 많은 것이 몇 개인지 파악해 저장(= count)
  3. count와 같은 개수를 가진 카드를 리스트에 저장
  4. 리스트를 오름차순 정렬 후 앞부분을 출력
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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());
        HashMap<Long, Integer> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            long tmp = Long.parseLong(br.readLine());
            map.put(tmp, map.getOrDefault(tmp, 0) + 1);
        }

        // 메인 알고리즘
        ArrayList<Long> list = new ArrayList<>();
        int count = 0;
        // 개수가 제일 많은 것이 몇 개인지 세기
        for (Map.Entry<Long, Integer> entry : map.entrySet()) {
            if (entry.getValue() >= count) {
                count = entry.getValue();
            }
        }

        // 최대 개수와 같은 것 리스트에 넣기
        for (Map.Entry<Long, Integer> entry : map.entrySet()) {
            if (entry.getValue() == count) {
                list.add(entry.getKey());
            }
        }

        // 오름차순 정렬 -> 제일 앞이 제일 작은 것
        Collections.sort(list);
        System.out.println(list.get(0));
    }
}

무난했다.

profile
SSAFY 9기 수료생

0개의 댓글