728x90
binary search
O(NlogN)

정렬되어있는 상태에서 이진 탐색을 수행한다.

중앙값과 찾고자 하는 값을 비교하여 데이터의 크기를 절반씩 줄인다.

 

사진 출처 : https://hcr3066.tistory.com/23

https://www.acmicpc.net/problem/1920

 

1920번: 수 찾기

첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들

www.acmicpc.net

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int N = Integer.parseInt(br.readLine());
            int[] A = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
            int M = Integer.parseInt(br.readLine());
            int[] findArr = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();

            // 정렬
            Arrays.sort(A);

            // 이진 탐색
            for(int find : findArr){
                int start=0, end=N-1;
                boolean findCheck = false;
                while(start <= end){
                    int mid = ( start + end ) / 2;
                    if(A[mid] > find) end=mid-1;
                    else if(A[mid] < find) start=mid+1;
                    else findCheck=true;

                    if(findCheck) break;
                }

                System.out.println(findCheck? 1: 0);
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
728x90

'algorithm > algorithm' 카테고리의 다른 글

[Algorithm] 에라토스테네스의 체  (0) 2023.02.09
[Algorithm] greedy  (0) 2023.02.09
[Algorithm] DFS & BFS  (0) 2023.02.08
[Algorithm] sliding window  (0) 2023.02.07
[Algorithm] bubble sort  (0) 2023.02.07

+ Recent posts