내가 생각했을때 문제에서 원하는부분
첫째 줄에 테스트케이스의 개수 T가 들어온다.
다음 줄에는 ‘수첩 1’에 적어 놓은 정수의 개수 N(1 ≤ N ≤ 1,000,000)이 입력으로 들어온다.
그 다음 줄에 ‘수첩 1’에 적혀 있는 정수들이 N개 들어온다.
그 다음 줄에는 ‘수첩 2’에 적어 놓은 정수의 개수 M(1 ≤ M ≤ 1,000,000) 이 주어지고, 다음 줄에 ‘수첩 2’에 적어 놓은 정수들이 입력으로 M개 들어온다.
모든 정수들의 범위는 int 로 한다.
‘수첩2’에 적혀있는 M개의 숫자 순서대로, ‘수첩1’에 있으면 1을, 없으면 0을 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 입력을 받는다.
HashSet 사용: 수첩 1의 정수를 HashSet에 저장하여 O(1) 시간 복잡도로 존재 여부를 확인할 수 있도록 한다.
결과 저장: 각 질문에 대한 결과를 StringBuilder에 저장한 뒤, 모든 질문이 처리된 후 한 번에 출력해준다.
코드로 구현
package baekjoon.baekjoon_26;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
// 백준 2776번 문제
public class Main928 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int T = Integer.parseInt(br.readLine()); // 테스트 케이스 개수
while(T-- > 0) {
int N = Integer.parseInt(br.readLine()); // 수첩 1에 적혀 있는 정수의 개수
HashSet<Integer> notebook1 = new HashSet<>();
// 수첩 1에 적힌 정수 입력
String[] numbers1 = br.readLine().split(" ");
for(int i = 0; i < N; i++) {
notebook1.add(Integer.parseInt(numbers1[i]));
}
int M = Integer.parseInt(br.readLine()); // 수첩 2에 적혀 있는 정수의 개수
// 수첩 2에 적힌 정수 입력 및 확인
String[] numbers2 = br.readLine().split(" ");
for(int i = 0; i < M; i++) {
int query = Integer.parseInt(numbers2[i]);
if(notebook1.contains(query)) {
sb.append("1\n");
} else {
sb.append("0\n");
}
}
}
// 결과 출력
System.out.print(sb.toString());
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.