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 |