뭉지(moonz)
작은 발자국들의 위대한 여정
뭉지(moonz)
  • All (200)
    • Test Code (4)
    • 백엔드 개발하며 작성한 (25)
      • Spring (16)
      • 데이터베이스 (6)
      • 기억할 내용 (3)
    • 언어 (53)
      • Java (25)
      • node.js (7)
      • Python (21)
    • 클라우드 (6)
    • Algorithm & Data Structure (51)
      • 개념 (15)
      • 문제 풀이 (36)
    • 유용한 모든 것 (16)
    • monologue (7)
      • 업무 노트 (1)
      • 관리 로그 (0)
      • 내 이야기 공책 (6)
    • Project (2)
    • TroubleShooting (8)
    • 지식 (18)
      • Machine Learning (6)
      • Review (7)
      • Web (5)
    • Computer Science (5)

블로그 메뉴

  • 홈
  • 태그

인기 글

최근 글

최근 댓글

전체 방문자
오늘
어제

티스토리

hELLO · Designed By 정상우.
뭉지(moonz)

작은 발자국들의 위대한 여정

Algorithm & Data Structure/문제 풀이

[Concept/Algorithm] 이분/이진 탐색 (Binary Search)

2022. 4. 17. 22:19
반응형
  • 이분 탐색 알고리즘은 정렬된 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색하는 방법입니다.
    • 이분 탐색 알고리즘은 배열 내부의 데이터가 정렬되어 있어야만 사용할 수 있는 알고리즘입니다.
  • 변수 3개 시작, 끝, 중간 값(start, end, mid)을 사용하여 탐색합니다.
  • 찾으려는 target과 중간 위치 값 mid를 반복 비교하여 원하는 데이터를 찾아가는 과정입니다.
  • 시간복잡도는 단계마다 범위를 절반으로 줄여나가므로 O(logN) 입니다.
    • ex) 32개 데이터-> 16개 데이터-> 8개-> 4개
  • 이분 탐색은 반복문과 재귀 호출 방식으로 구현할 수 있습니다.
public classBinary_Search {
    //재귀 호출 방식으로 구현
    private static intbinary_search_recur(inttarget,intstart,intend) {
        if(start > end)return-1;
            int mid = (start+end) / 2;//중간값
        if(target == mid)returnmid;
        // target이 중간값보다 큰 경우,오른쪽에서 search
        else if(target > mid)returnbinary_search_recur(target, mid+1, end);
        else returnbinary_search_recur(target, start, mid-1);
    }

    //반복문으로 구현
    private static intbinary_search_for(inttarget,intstart,intend) {
        while(start <= end) {
            int mid = (start+end) / 2;
            if(target == mid)returnmid;
            // target이 중간값보다 큰 경우,오른쪽에서 search
            else if(target > mid) start = mid+1;
            else end = mid-1;
       }
            return-1;
    }

    static int[]sortedArr= {1,3,5,7,8,10,20,35,99,100};
    public static void main(String[] args) {
            System.out.print("순환 호출(재귀) 이용한 이진탐색 : ");
            System.out.println(Binary_Search.binary_search_recur(5, 0,sortedArr.length-1));
            System.out.print("반복을 이용한 이진탐색 : ");
            System.out.println(Binary_Search.binary_search_for(5, 0,sortedArr.length - 1));
        }
}

 

반응형
저작자표시 (새창열림)

'Algorithm & Data Structure > 문제 풀이' 카테고리의 다른 글

[JAVA] baekjoon 1891 사분면  (0) 2022.06.13
[JAVA, 백준] 16947. 서울 지하철 2호선  (0) 2022.04.18
[JAVA] 프로그래머스 - 행렬 테두리 회전하기 LV2  (0) 2022.04.01
[JAVA] 프로그래머스 - 다트 게임 LV1  (0) 2022.04.01
[JAVA] 프로그래머스 - 전화번호 목록 LV2  (0) 2022.01.26
    'Algorithm & Data Structure/문제 풀이' 카테고리의 다른 글
    • [JAVA] baekjoon 1891 사분면
    • [JAVA, 백준] 16947. 서울 지하철 2호선
    • [JAVA] 프로그래머스 - 행렬 테두리 회전하기 LV2
    • [JAVA] 프로그래머스 - 다트 게임 LV1
    뭉지(moonz)
    뭉지(moonz)
    제가 깨달은 것을 정리하는 공간입니다. 🧡

    티스토리툴바