[백준][암기왕](https://www.acmicpc.net/problem/2776)


자바 알고리즘을 공부하다 보면, HashSet과 HashMap이란 것을 보게 된다.
요새는 그렇게 자주 나오는 유형은 아니라고 하지만, 백준 레벨을 올리는 데에는 이만한 문제가 없는 것 같다. 고난이도의 생각을 크게 요구하지도 않을 뿐더러, 조금의 사고력만을 투자한다면 풀리니깐.
문제를 보면 사족이 길긴하다.
그래서 우리가 뭘 하면 되는건데?
집합에 숫자를 저장하고, 부른 숫자가 그 집합 내에 있으면 '1'이고, 아니라면 '0'이다.
이게 문제 파악의 전부다.
HashSet을 사용하는 방법은 여러 블로그에서 설명하고 있으니, 여기서 사용할 것만 간단하게 파악하도록 해보자.
딱 이 두 가지만 사용해서 이번 문제를 푼다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine());
while (T-- > 0) { // 테스트 케이스의 횟수 반복
HashSet<Integer> hashSet = new HashSet<>(); // hashSet이라는 이름의 집합을 생성
long n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < n; i++) {
int a = Integer.parseInt(st.nextToken());
hashSet.add(a); // hashSet이라는 집합에 원소 넣기
}
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < m; i++) {
int a = Integer.parseInt(st.nextToken());
if (hashSet.contains(a)) { // 집합 내에 'a'라는 원소가 있다면?
sb.append("1").append('\n'); // '1'을 표시
} else{ // 집합 내에 'a'라는 원소가 없다면?
sb.append("0").append('\n'); // '0'을 표시
}
}
}
System.out.println(sb.toString());
}
}
위에서 말했던대로 요새 이런 문제가 나오는 추세는 아니지만, 자바 알고리즘 초심자에게 있어, 자신감을 채워주는 용도로는 이만한게 없는 것 같다.