CS/알고리즘

이진 검색(binary search)

리져니 2021. 9. 10. 12:25

이진 검색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다.

 

처음 중간의 값을 임의의 값으로 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택하고 있다.

처음 선택한 중앙값이 만약 찾는 값보다 크면 그 값은 새로운 최댓값이 되며, 작으면 그 값은 새로운 최솟값이 된다.

검색 원리상 정렬된 리스트에만 사용할 수 있다는 단점이 있지만, 검색이 반복될 때마다 목표값을 찾을 확률은 두 배가 되므로 속도가 빠르다는 장점이 있다.

 

 

<예시 문제>

 

설명

임의의 N개의 숫자가 입력으로 주어집니다. N개의 수를 오름차순으로 정렬한 다음 N개의 수 중 한 개의 수인 M이 주어지면 이분검색으로 M이 정렬된 상태에서 몇 번째에 있는지 구하는 프로그램을 작성하세요. 단 중복값은 존재하지 않습니다.

 

입력

첫 줄에 한 줄에 자연수 N(3<=N<=1,000,000)과 M이 주어집니다.

두 번째 줄에 N개의 수가 공백을 사이에 두고 주어집니다.

 

출력

첫 줄에 정렬 후 M의 값의 위치 번호를 출력한다.

 

예시 입력 1 

8 32

23 87 65 12 57 32 99 81

 

예시 출력 1

3

 

 

<코드>

import java.util.*;


public class Main {
    public static int solution(int n, int m, int[] arr){
        int answer = 0;
        boolean flag = false;
        int lt = 0;
        int rt = n-1;
        Arrays.sort(arr);

        while(!flag){
            int mid = (lt+rt)/2;
            if(arr[mid] == m) {
                answer= mid+1;
                flag=true;
            }else if(arr[mid]<m) lt = mid;
            else rt = mid;
        }

        return answer;
    }

    public static void main(String[] args) {
      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(solution(n,m,arr));

    }
}

 

<설명>

 

728x90

'CS > 알고리즘' 카테고리의 다른 글

너비 우선 탐색(Breadth-first search, BFS)  (0) 2021.09.15
깊이 우선 탐색(depth-first search, DFS)  (0) 2021.09.15
삽입 정렬(insertion sort)  (0) 2021.09.09
선택 정렬(selection sort)  (0) 2021.09.08
버블 정렬 (bubble sort)  (0) 2021.07.05