CodeClover

[JAVA] 백준 10816_숫자카드2 본문

코딩테스트

[JAVA] 백준 10816_숫자카드2

coding dew 2025. 4. 13. 23:33

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

10816 숫자카드2 문제

📌 문제 탐색하기

상근이가 가지고 있는 숫자카드의 개수 N , N개의 카드들 , 정수 M , M개의 카드들이 입력된 값에서 각각 입력된 M개의 정수들이 N개의 숫자카드에 있는 숫자만큼 출력하는 문제이다. 

https://www.acmicpc.net/problem/10815 이 문제의 응용버전...  ! 

📌 가능한 시간복잡도

N개의 숫자 저장 하고 조회하는 과정에서 O(N) , O(M) 만큼의 시간복잡도 .... 
따라서 가능한 시간복잡도는 O(N) + O(M) 입니다. 

📌 코드 설계하기

시간복잡도를 잘 생각해서 풀어야하는 문제이다. 조건에 보면 50만개의 숫자에 대해서 체크해야하는 문제이므로 단순한 반복으로 해결 가능 . 우선, 상근이가 가지고 있는 숫자 카드를 COUNT하고 - 찾고 싶은 M개의 숫자일때마다 COUNT++ 처리

📌 정답 코드

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

public class Main {
    public static int[] solution(int[] cards, int[] queries) {
        Map<Integer, Integer> map = new HashMap<>();

        for (int card : cards) {
            map.put(card, map.getOrDefault(card, 0) + 1);
        }
        int[] result = new int[queries.length];
        for (int i = 0; i < queries.length; i++) {
            result[i] = map.getOrDefault(queries[i], 0);
        }
        return result;
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        int[] cards = new int[N];
        for (int i = 0; i < N; i++) {
            cards[i] = Integer.parseInt(st.nextToken());
        }

        int M = Integer.parseInt(br.readLine());
        st = new StringTokenizer(br.readLine());
        int[] queries = new int[M];
        for (int i = 0; i < M; i++) {
            queries[i] = Integer.parseInt(st.nextToken());
        }
        int[] count = solution(cards, queries);

        StringBuilder sb = new StringBuilder();
        for (int c : count) sb.append(c).append(" ");
        System.out.println(sb);
    }
}

'코딩테스트' 카테고리의 다른 글

[JAVA] 백준 2606_바이러스  (0) 2025.04.17
[JAVA] 백준 1260_DFS와 BFS  (0) 2025.04.16
[JAVA] 백준 4158_CD  (1) 2025.04.11
[JAVA] 백준 1244_스위치 켜고 끄기  (0) 2025.04.10
[JAVA] 백준 1251_단어 나누기  (2) 2025.04.09