문제
연종이는 엄청난 기억력을 가지고 있다. 그래서 하루 동안 본 정수들을 모두 기억 할 수 있다. 하지만 이를 믿을 수 없는 동규는 그의 기억력을 시험해 보기로 한다. 동규는 연종을 따라 다니며, 연종이 하루 동안 본 정수들을 모두 ‘수첩1’에 적어 놓았다. 그것을 바탕으로 그가 진짜 암기왕인지 알아보기 위해, 동규는 연종에게 M개의 질문을 던졌다. 질문의 내용은 “X라는 정수를 오늘 본 적이 있는가?” 이다. 연종은 막힘없이 모두 대답을 했고, 동규는 연종이 봤다고 주장하는 수 들을 ‘수첩2’에 적어 두었다. 집에 돌아온 동규는 답이 맞는지 확인하려 하지만, 연종을 따라다니느라 너무 힘들어서 여러분에게 도움을 요청했다. 동규를 도와주기 위해 ‘수첩2’에 적혀있는 순서대로, 각각의 수에 대하여, ‘수첩1’에 있으면 1을, 없으면 0을 출력하는 프로그램을 작성해보자.
이 문제는 그러니까.. 수첩2에 있는 내용을 수첩1에서 기억하고 있는지 확인하는 문제다.
이걸 푸는 방법에는 2가지가 있다고 한다. 이분 탐색하는 방법과 set에서 답을 계산하는 방식 2개가 있다고 한다.
나는 후자를 선택하였다. 왜냐하면 그게 빠르니
근데 문제는 백준을 오랜만에서 풀어서 그런지 입출력에 미숙했다.
그래서 그거부터 학습하는게 좋다고 판단했다.
일단 input을 사용한다고 작성하고
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
한줄 단위로만 입력 값을 사용하고 싶다면..
br.readLine();
구분자가 필요하다면...
StringTokenizer st = new StringTokenizer(br.readLine());
이런식으로 하게 되면 된다.
출력은 그냥 println으로 했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
for (int i = 0; i < t; i++) {
Set<Integer> set = new HashSet<>();
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
set.add(Integer.parseInt(st.nextToken()));
}
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for (int j = 0; j < m; j++) {
if (set.contains(Integer.parseInt(st.nextToken()))) {
sb.append(1).append("\n");
} else {
sb.append(0).append("\n");
}
}
}
System.out.print(sb);
}
}
코드는 다음과 같다.
마지막에 StringBuilder를 사용하는 이유는 시간초과가 발생했기 때문이다.
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 1149번 RPG 거리 (0) | 2020.09.30 |
---|---|
[백준] 15686번 치킨 배달 (0) | 2020.09.07 |
[백준] 3190번 뱀 (0) | 2020.09.06 |
[백준] 1931번 회의실 배정 (0) | 2020.08.24 |
[백준] 1946번 신입 사원 (0) | 2020.08.24 |