
User
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.StringTokenizer;
public class Number_Card2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
/*
* HashMap<Key, Value>
* Key = 입력되는 원소
* Value = 원소의 개수(=중복 입력 된 원소의 수)
*/
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int i =0; i<N; i++){
int key = Integer.parseInt(st.nextToken());
/*
* getOrDefault(key, defaultValue)
* key에 대해 map에 저장 된 value를 반환한다.
* 만약 value가 없을 경우 defaultValue값을 반환한다.
*/
map.put(key,map.getOrDefault(key,0)+ 1);
}
int M = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i<M; i++){
int key = Integer.parseInt(st.nextToken());
sb.append(map.getOrDefault(key,0)).append(' ');
}
System.out.println(sb);
}
}
HashMap 을 사용해서 각 숫자 카드의 개수를 저장할 준비
첫 번째로 숫자 카드의 개수를 입력받음 = N
공백을 기준으로 숫자들 분리
각 숫자를 읽어 들이면서 map에 해당 숫자가 있는지 확인, map.put(key, map.getOrDefault(key, 0) + 1)를 사용하여 key에 해당하는 값을 map에 저장한다 만약 key 가 이미 map 에 존재한다면 해당 값에 1을 더하고 존재하지 않으면 0에 1을 더한 값을 저장한다.
5.다음으로 주어진 숫자들의 개수를 다시 입력받음 = M
마찬가지로 공백을 기준으로 숫자 분리
각 숫자를 읽어들이면서 해당 숫자가 'map'에 저장되어 있는지 확인하고 있으면 그 값을 sb에 추가한다
즉 첫 번째 집합을 입력할 때 부터 getOrDefault를 이용해서 등장 횟수를 카운트하고 다음 반복문에서 해당 key에 해당 하는 value(값)을 sb에 저장 후 출력한다.
이 문제는 두번째 집합의 숫자 카드가 첫 번째 집합에서 몇 번 존재하는지 확인하는 것.