자바/백준

[백준 10816] 숫자 카드 2

슈슈버거 2022. 11. 4. 15:58

문제

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

 

10816번: 숫자 카드 2

첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,

www.acmicpc.net


내가 작성한 코드

import java.io.*;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;

public class qor10816 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int num = Integer.parseInt(br.readLine());
        long[] list = new long[num];
        StringTokenizer st = new StringTokenizer(br.readLine());

        for(int i = 0; i<num; i++){
            list[i] = Long.parseLong(st.nextToken());
        }

        Arrays.sort(list);

        HashMap<Long, Integer> cardNcount = new HashMap<>();

        for(int i = 0; i<num; i++){
            if(cardNcount.containsKey(list[i])){
                cardNcount.put(list[i], cardNcount.get(list[i])+1);
            }
            else{
                cardNcount.put(list[i],1);
            }
        }

        int card = Integer.parseInt(br.readLine());
        StringTokenizer st2 = new StringTokenizer(br.readLine());

        for(int i = 0; i<card; i++){
            long input = Long.parseLong(st2.nextToken());

            if(Arrays.binarySearch(list, input)<0){
                bw.write("0 ");
            }
            else{
                bw.write(cardNcount.get(input)+" ");
            }
        }

        bw.close();
    }
}

 binarySearch로 있는지 없는지 파악하고 Map에다가 해당 숫자 개수 저장한 다음에 그 값을 불러오는 식으로 짰다.

애초에 Map 하나만으로 풀 수 있는 방법이 있을까?