티스토리 뷰
728x90
https://www.acmicpc.net/problem/10815
- 문제 :
숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 가지고 있는지 아닌지를 구하는 프로그램을 작성하시오.
- 풀이 :
이분탐색 문제입니다.
상근이가 갖고 있는 카드들을 arr배열에 넣고 M개의 수에 대해 arr안에 해당 수가 존재하는지 이분탐색을 실시하며 존재한다면 1 없다면 0을 출력합니다.
- 소스코드 :
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static int n, m;
static int arr[];
public static void main(String[] args) throws IOException {
n = Integer.parseInt(br.readLine());
arr = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < n; i++)
arr[i] = Integer.parseInt(st.nextToken());
Arrays.sort(arr);
m = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i = 0 ; i < m; i++) {
int num = Integer.parseInt(st.nextToken());
if(binarySearch(num)) bw.write("1 ");
else bw.write("0 ");
}
bw.close();
br.close();
}
private static boolean binarySearch(int num) {
int leftIndex = 0;
int rightIndex = n - 1;
while(leftIndex <= rightIndex){
int midIndex = (leftIndex + rightIndex) / 2;
int mid = arr[midIndex];
if(num < mid) rightIndex = midIndex - 1;
else if(num > mid) leftIndex = midIndex + 1;
else return true;
}
return false;
}
}
320x100
'Algorithm > Binary Search' 카테고리의 다른 글
(Python/파이썬) - 백준(BOJ) 17951번 : 흩날리는 시험지 속 내 평점이 느껴진거야 (4) | 2022.07.11 |
---|---|
(Python/파이썬) - 백준(BOJ) 7795번 : 먹을 것인가 먹힐 것인가 (0) | 2022.04.06 |
(Python) - BOJ(1072번) : 게임 (0) | 2022.02.21 |
(Python) - BOJ(2805번) : 나무 자르기 (0) | 2022.02.01 |
(Python) - BOJ(1920번) : 수 찾기 (0) | 2022.01.28 |
댓글
© 2022 WonSeok, All rights reserved