[JAVA] 백준 10816번 - 숫자 카드 2

닥개·2025년 4월 24일

공부

목록 보기
19/23

❓문제
숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오.



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

셋째 줄에는 M(1 ≤ M ≤ 500,000)이 주어진다. 넷째 줄에는 상근이가 몇 개 가지고 있는 숫자 카드인지 구해야 할 M개의 정수가 주어지며, 이 수는 공백으로 구분되어져 있다. 이 수도 -10,000,000보다 크거나 같고, 10,000,000보다 작거나 같다.



시간단축 코드



기존 코드

백준 통과는 되는데.. 시간이 오래걸려서ㅜㅜ 시간 단축 시도를 해봐야겠다.

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

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        Map<Integer, Integer> MMap = new HashMap<>();

        int N = sc.nextInt();
        int[] Narr = new int[N];
        for (int i = 0; i < N; i++) Narr[i] = sc.nextInt();

        int M = sc.nextInt();
        int[] Marr = new int[M]; // 입력 순서 저장
        for (int i = 0; i < M; i++) {
            Marr[i] = sc.nextInt();
            MMap.put(Marr[i], 0); // 중복체크 이전 0으로 초기화
        }

        sc.close();

        for (int num : Narr) {
            if (MMap.containsKey(num)) {
                MMap.put(num, MMap.get(num) + 1);
            }
        }

        StringBuilder sb = new StringBuilder();
        for (int num : Marr) {
            sb.append(MMap.get(num)).append(" ");
        }

        System.out.println(sb);
    }
}
profile
발바닥부터 시작하는 코딩공부

0개의 댓글