[백준] 11652번 카드 - Java, 자바

Kim Ji Eun·2022년 3월 24일
1

난이도

실버 4

문제

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

풀이

  1. 맵을 사용해 등장하는 수를 key로, 횟수를 value로 설정 (getOrDefault 사용)
        for(int i=0;i<n;i++){
            Long num =Long.parseLong(br.readLine());
            map.put(num,map.getOrDefault(num,0)+1);
        }
  1. map.value()로 만든 리스트를 for문을 이용해 가장 큰 value를 구하기
        int max=0;
        ArrayList<Integer> list = new ArrayList<>(map.values());
        for(Integer val : list){
            if(max<val){
                max=val;
            }
        }
  1. 가장 큰 value를 가진 key 값을 우선순위 큐에 넣기(오름차순으로 수를 넣기 위함)
     PriorityQueue<Long> q = new PriorityQueue<>();
        for(Long key :map.keySet()){
            if(max==map.get(key)){
                q.add(key);
            }
        }
  1. 큐에 가장 앞에 있는 값을 출력
       System.out.println(q.poll());

주의
여기서 num은 범위가 2^-62~2^62이므로 Long으로 해주어야한다. (int로 할 경우 런타임에러)

코드

package 정렬;

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

public class BOJ11652 {
    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 num =Long.parseLong(br.readLine());
            map.put(num,map.getOrDefault(num,0)+1);
        }

        int max=0;
        // 맵 반복문 돌리는 방법
        ArrayList<Integer> list = new ArrayList<>(map.values());
        for(Integer val : list){
            if(max<val){
                max=val;
            }
        }

        PriorityQueue<Long> q = new PriorityQueue<>();
        // 밸류로 키 조회하기
        for(Long key :map.keySet()){
            if(max==map.get(key)){
                q.add(key);
            }
        }
        System.out.println(q.poll());

    }


}
profile
Back-End Developer

0개의 댓글