코딩테스트-알고리즘/백준 BOJ

[백준 BOJ/Silver IV] 11652번 : 카드

닉네임생각즁 2024. 1. 13. 15:18

 

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

 

11652번: 카드

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

www.acmicpc.net

 

import java.util.*;
import java.io.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        Long answer = 0L;
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        Map<Long, Integer> map = new HashMap<Long, Integer>();
        for(int i=0; i<N; i++) {
            long card = sc.nextLong();
            map.put(card, map.getOrDefault(card, 0)+1);
        }
        
        int max = Collections.max(map.values());

        Map<Long, Integer> sortedMap = new TreeMap<Long, Integer>(map);
        
        for(Long key : sortedMap.keySet()) {
            if(sortedMap.get(key) == max) {
                answer = key;
                break;
            }
        }
        
        System.out.println(answer);
    }
}

 

getOrDefault 메서드를 공부한 다음날 바로 사용해볼 수 있는 문제를 만나서 기뻤다ㅋㅋㅋㅋㅋㅋㅋㅋ

이 메서드를 사용하면 맵을 만들어갈때 값이 없는 상태라면 0+1->1 / 값이 있는 상태라면 현재값+1 이라서 카드가 몇개있는지 셀 수 있다.

맵을 만든 후 value 중 가장 큰 값을 찾았고 (가장 많이 갖고있는 카드 개수를 알 수 있음)

TreeMap을 사용하여 오름차순으로 정렬해주었다

가장 많이 갖고있는 카드가 여러개라면 작은 숫자가 적힌 카드가 정답이라는 조건이 있기에 오름차순 정렬 후 순서대로 탐색하면서 max value를 가진 key를 발견시 바로 종료시키면 그게 정답이 된다는 생각이었다

 

정렬을 하기 위해 맵을 하나 더 만드는 셈인데 이게 실행 시 부담이 갈 수도 있을까?🤔 더 좋은 방법이 있을지 찾아봐야겠다

 

+

https://fruits2lim.tistory.com/entry/%EC%98%A4%EB%8A%98%EC%9D%98-%EC%9E%90%EB%B0%94-%EB%AC%B8%EB%B2%95-10

 

오늘의 자바 문법 - HashMap 정렬 & 최대값/최소값 찾기

HashMap 정렬 - HashMap은 키 or 값으로 정렬되지 않기에 다른걸 이용해서 정렬해주어야함 1) TreeMap 이용 - TreeMap은 SortedMap 인터페이스를 상속받는 클래스이기 때문에 이를 이용해서 정렬해줄 수 있음

fruits2lim.tistory.com

해당 문제를 풀면서 찾아본 HashMap 오름차순 정렬과 최대값/최소값 찾기를 정리해봄