[백준] 11652 카드

차누·2023년 10월 10일
0

문제

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

출력

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

가장 많은 횟수의 키 값을 반환해 출력하는 문제이다

자바코드


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 bj_11652 {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		//BufferedReader로 입력받은 값을 정수형으로 변환
		//parseInt : 입력값을 호출한 객체 타입으로 반환
		int n = Integer.parseInt(br.readLine());
		
		//해쉬맵 선언 반환값은 객체타입
		//값을 key, 횟수를 value로 저장
		HashMap<Long, Integer> hs = new HashMap<>();
		
		for(int i = 0; i < n; i++) {
			
			//초기 value값을 0으로 초기화하고 중복값이 들어올경우 +1 해준다
			long num = Long.parseLong(br.readLine());
			
			//**** 중요코드
			hs.put(num, hs.getOrDefault(num,0) + 1);
			

		}
		
		int max = 0;
		
		ArrayList<Integer> list = new ArrayList<>(hs.values());
		
		//최대값 구하기
		for(Integer value : list) {
			
			if(max < value) {
				
				max = value;
			}
		}
		
		//내림차순 정렬
		PriorityQueue<Long> q = new PriorityQueue<>();
		
		//
		for(Long key : hs.keySet()) {
			
			if(max == hs.get(key)) {
				q.add(key);
			}
		}
		
		System.out.println(q.poll());
		
	}

}
profile
to be good programmer

0개의 댓글