문제를 읽고 HashMap 과 Counting 정렬을 사용하고자 했지만 범위가 너무 넓어 HashMap 을 먼저 사용하고 Counting 을 후에 진행하여 진행했다.
HashMap
- 기존의 값을 확인하는 기능이 필요하여 getOrDefault 를 사용하였다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
import java.util.HashMap;
public class Main
{
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);
}
}
Counting
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main
{
public static void main(String[] args) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int[] counting = new int[20000001]; // 입력받는 수의 범위 : -10,000,000 ~ 10,000,000
int N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
for(int i = 0 ; i < N; i++)
{
counting[Integer.parseInt(st.nextToken()) + 10000000]++; // 해당 인덱스의 값 증가
}
int M = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
for(int i = 0; i < M; i++)
{
sb.append(counting[Integer.parseInt(st.nextToken()) + 10000000]).append(' ');
}
System.out.println(sb);
}
}