본문 바로가기
코테

[Java] 백준 : 10816 숫자 카드 2

by sozr 2025. 1. 15.

 

 

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

 

 

 

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

public class baekjoon_10816 {
	public static String card(int N, long[] card, int M, long[] num) {
		HashMap<Long, Integer> map = new HashMap<>();
		
		for(long c : card) {
			// map에 값이 있으면 1을 더해주고 아니라면 1로 초기화
			map.put(c, map.getOrDefault(c, 0) + 1);
		}
		
		StringBuilder sb = new StringBuilder();
		for(long n : num) {
			sb.append(map.getOrDefault(n,0)).append(" ");	// 있으면 value값 없으면 0
		}
		
		return sb.toString().trim(); // trim: 앞뒤공백제거
	}
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		
		int N = Integer.parseInt(br.readLine()); // 현재 카드의 수
		long[] card = new long[N];	// 카드 배열
		

		StringTokenizer st = new StringTokenizer(br.readLine());
		for(int i=0; i<N; i++) {
			card[i] = Integer.parseInt(st.nextToken());
		}
		
		
		int M = Integer.parseInt(br.readLine()); 
		long[] num = new long[M];
		
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<M; i++) {
			num[i] = Integer.parseInt(st.nextToken());
		}
		
		System.out.print(card(N, card, M, num));
		br.close();
		
		
	}
}

 

 

hashmap을 사용해서 현재 가지고 있는 카드 수 만큼

key에 현재 카드 숫자, value에는 key가 있으면 1을 증가시키고 없으면 1로 초기화해서 저장했다.

 

그리고 개수를 구해야 하는 숫자 M개만큼

현재 수가 hashmap에 있으면 value값을 없으면 0으로 append 해주었다