반응형
문제
N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오.
입력
첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들이 A안에 존재하는지 알아내면 된다. 모든 정수의 범위는 -231 보다 크거나 같고 231보다 작다.
출력
M개의 줄에 답을 출력한다. 존재하면 1을, 존재하지 않으면 0을 출력한다.
앞서 풀었던 숫자 카드 문제와 거의 동일하다! 이문제 또한 이분 탐색을 사용한다
음.. 달라진건 출력방식? 뭐 암튼 바로 레츄코 풀어보자
문제풀이
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BJ_CT_11 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n =Integer.parseInt(br.readLine());
int[] narr= new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<n;i++){
narr[i]=Integer.parseInt(st.nextToken());
}
Arrays.sort(narr);
int m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
int[] result = new int[m];
for(int i=0;i<m;i++){
int left = 0;
int right = n-1;
int num = Integer.parseInt(st.nextToken());
while (left<=right){
int midIndex =(left+right)/2;
int middle = narr[midIndex];
if(num==middle){
result[i]=1;
break;
}
if(num<middle) right= midIndex-1;
else if(num>middle) left = midIndex+1;
if(left>right){
result[i]=0;
break;
}
}
}
for(int i=0;i<result.length;i++){
System.out.println(result[i]);
}
}
}
쏘간단! 풀이는 이전 포스트를 참고해주세욥!
비슷한 거 풀어봤다고 바로 통과!!
반응형
'알고리즘🤮 > 백준' 카테고리의 다른 글
[JAVA] 백준 11659번: 구간 합 구하기4 (1) | 2023.01.08 |
---|---|
[JAVA] 백준 2512번: 예산 (0) | 2022.12.10 |
[JAVA] 백준 10815번: 숫자 카드 (0) | 2022.12.07 |
[JAVA] 백준 1316번: 그룹 단어 체커 (0) | 2022.12.04 |
[JAVA] 백준 2775번: 부녀회장이 될테야 (0) | 2022.12.01 |