Algorithm/inflearn

이분검색

마닐라 2021. 9. 27. 23:04

 

import java.util.*;

public class Main {
    public int solution(int n,int m, int[] arr) {
        int answer = 0;
        //이분검색은 무조건 정렬이 되어있어야한다.
        //(lt+rt) / 2 를 인덱스 값으로 따로 생성해두고
        //해당 값이 큰지 작은지 보고 해당 인덱스 범위로만 탐색하면 된다.
        //검색 범위가 절반씩 줄어든다.
        //값이 없을 때도 있을 수 있으니 lt가 rt보다 커지면 멈춰야한다.
        Arrays.sort(arr);
        int lt = 0, rt = n-1;
        while(lt<=rt) {
            int mid = (lt + rt) / 2; //첫번째 mid = 3
            if (arr[mid] == m) {
                answer = mid + 1; //번째이므로 인덱스 + 1
                break;
            }
            //큰 쪽을 날리고 작은 쪽만 탐색
            if (arr[mid] > m) rt = mid - 1;
            //작은 쪽을 날리고 큰 쪽만 탐색
            else lt = mid + 1;
        }

        return answer;
    }

    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt();
        int m = kb.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) arr[i]=kb.nextInt();
        System.out.println(T.solution(n, m, arr));
    }
}

'Algorithm > inflearn' 카테고리의 다른 글

★★마구간 정하기(결정알고리즘)  (0) 2021.09.28
★★뮤직비디오(결정알고리즘)  (0) 2021.09.27
좌표 정렬  (0) 2021.09.27
장난꾸러기  (0) 2021.09.27
중복 확인  (0) 2021.09.27