알고리즘/Hash

백준 알고리즘 [해시] 숫자카드 2_10816_실버4

개발하는 동그리 2024. 12. 1. 14:00
728x90
반응형
문제
숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오.

 

체감 난이도
실버4

 

문제 풀이 소감
HashMap 을 제대로 활용할 수 있는지
getOrDefault 사용법을 제대로 숙지할 수 있음

 

코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.StringTokenizer;

/**
 * 숫자 카드는 정수 하나가 적혀져 있는 카드
 * 숫자카드 N개를 가지고 있고
 * 정수 M개가 주어졌을 떄 이 수가 적혀있는 숫자 카드를 상근이가 몇개 가지고 있는지?
 */
public class Main {

    static int N,M;
    static int[] ListA;
    static HashMap<Integer, Integer> HashA = new HashMap<>();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        N = Integer.parseInt(br.readLine());
        ListA = new int[N];

        StringTokenizer st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            int num = Integer.parseInt(st.nextToken());
            HashA.put(num, HashA.getOrDefault(num, 0) + 1);
        }

        M = Integer.parseInt(br.readLine());
        StringBuilder sb = new StringBuilder();
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < M; i++) {
            int num2 = Integer.parseInt(st.nextToken());
            sb.append(HashA.getOrDefault(num2, 0)).append(" ");
        }

        System.out.println(String.valueOf(sb).trim());
    }

}

 

문제 바로가기
https://www.acmicpc.net/problem/10816

 

 

728x90
반응형