Programming/백준
[백준] 10815번 : 숫자 카드
조용한고라니
2021. 3. 12. 19:20
반응형
10815번: 숫자 카드
첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,
www.acmicpc.net
[이진 탐색, Binary Search]
그래프 문제를 주로 풀다가 문제의 스펙트럼을 좀 넓혀보고자 이진 탐색 문제를 풀기로 하였다. 이진 탐색의 기본적인 내용을 다루며 응용에 힘쓰도록 한다.
이 문제는 교과서적인 이진 탐색을 물어보는 문제이고, m개의 데이터에 대해 이진 탐색을 수행하면 되므로 딱히 어려울 것은 없어보인다.
# Code </>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] num = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0; i<n; i++)
num[i] = Integer.parseInt(st.nextToken());
Arrays.sort(num);
int m = Integer.parseInt(br.readLine());
boolean[] result = new boolean[m];
st = new StringTokenizer(br.readLine());
for(int i=0; i<m; i++) {
int target = Integer.parseInt(st.nextToken());
int left = 0, right = n-1;
while(left <= right){
int mid = (left + right) / 2;
if(num[mid] >= target) {
if (num[mid] == target)
result[i] = true;
right = mid - 1;
}
else
left = mid + 1;
}
System.out.print(result[i]?"1 " : "0 ");
}
}
}
반응형