알고리즘

[백준] 11652번 카드 _ JAVA ( 주석 설명 ) 본문

백준 - JAVA/정렬

[백준] 11652번 카드 _ JAVA ( 주석 설명 )

wch_s 2023. 3. 7. 19:35

풀이

1) 문제의 입력값 범위가 -2^62 ~ 2^62 까지이므로 배열의 타입은 Long 으로 설정한다.

2) Arrays.sort() 로 정렬을 한다.

3) 주어지는 입력값이 1개일 수 있으므로 초기값은 ary[0]으로 잡는다. 

4) ary[i].eqauls(ary[i+1])로 가장 많이 들고 있는 정수 카드를 찾는다.

 

배워가는 것

//getOrDefault
//지정된 키가 매핑된 값을 반환하거나, 매핑이 없는 경우 defaultValue를 반환한다.
//중복 카드 수가 늘어나면 +1을 한다.
map.put(key, map.getOrDefault(key, 0)+1);

 


 

1번(정렬)

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

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()); //가지고 있는 숫자 카드의 개수

        Long[] ary = new Long[N]; //카드 숫자 저장 //범위가 2^62까지이므로 Long 으로 생성
        for(int i=0;i<N;++i){
            ary[i] = Long.valueOf(br.readLine());
        }

        Arrays.sort(ary); //카드 정렬

        int max = 0;
        Long result = ary[0]; //주어지는 입력값이 1개일 수 있으므로 초기값은 ary[0]으로 잡는다.
        int count = 0;
        for(int i=0;i<N-1;++i){
            if(ary[i].equals(ary[i+1])){
                count++; //카드가 같을 시 count 한다.
                if(max<count){ //가장 많이 가지고 있는 정수 카드 갱신
                    max = count;
                    result = ary[i]; //해당 인덱스 값 저장
                }
            }
            else
                count = 0;
        }

        System.out.println(result);
    }
}

 

 


 

2번(Map / key : 카드의 숫자, value : 카드 개수)

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

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()); //가지고 있는 숫자 카드의 개수

        //key : 가지고 있는 카드의 숫자
        //value : 해당 숫자 카드의 개수
        HashMap<Long, Integer> map = new HashMap<>();

        for(int i=0;i<N;++i){
            Long key = Long.parseLong(br.readLine());

            //getOrDefault
            //지정된 키가 매핑된 값을 반환하거나, 매핑이 없는 경우 defaultValue를 반환한다.
            //중복 카드 수가 늘어나면 +1을 한다.
            map.put(key, map.getOrDefault(key, 0)+1);
        }

        int max = 0;
        Long result = Long.valueOf(0);
        for(Long key : map.keySet()){
            if(map.get(key)>max){ //가장 많이 가지고 있는 카드를 알아낸다.
                max = map.get(key);
                result = key;
            }
            else if(map.get(key)==max){
                result = Math.min(result, key); //카드 수가 같을 경우 key 값이 더 작은 것으로 출력한다.
            }
        }
        System.out.println(result);
    }
}