이 문제는 <집합과 맵> 단계라서 보통 맵을 이용하여 푼다.
맵을 이용할 경우
- HashMap을 이용하여 Key값에 숫자카드를 N개만큼 넣는다.
- 이 때 getOrDefault를 이용해 중복값이 있으면 value를 증가시킨다.
- M개 만큼 입력받은 숫자카드를 키값에 넣어 해당하는 Value를 출력한다.
근데 나는 맵이 아닌 배열을 이용하였다.
Counting 정렬에서 Count[]를 증가시키는 방법을 가져와 사용했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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 N=Integer.parseInt(br.readLine());
int count[]= new int[20000001];
StringTokenizer st = new StringTokenizer(br.readLine()," ");
for(int i=0; i<N; i++)
count[Integer.parseInt(st.nextToken())+10000000]++;
int M=Integer.parseInt(br.readLine());
int card[]=new int[M];
st = new StringTokenizer(br.readLine()," ");
for(int i=0; i<M; i++)
card[i]=Integer.parseInt(st.nextToken());
for(int i=0; i<M; i++)
sb.append(count[card[i]+10000000]+" ");
System.out.print(sb);
br.close();
}
}