hyeon.s
개발로그
hyeon.s
전체 방문자
오늘
어제
  • 분류 전체보기 (151) N
    • Web 및 인프라 (1)
      • Web (1)
      • Terraform (2)
      • Docker (1)
    • Android (1)
      • 공부 (28)
      • 트러블슈팅 (12)
      • 프로젝트 개발 (10)
      • Compose (2)
      • 우테코 프리코스 (0)
    • Server (6) N
      • 공부 (1)
      • Spring (5) N
    • 알고리즘 (68)
      • 문제풀이 (C++,Kotlin) (54)
      • 공부 (13)
    • 디자인 (3)
      • UI (3)
    • Language (5)
      • Kotlin (5)
      • JAVA (0)
    • IT 동아리 (8)
      • UMC 3기 (Android) (7)
      • Sopt 32기 (Android) (1)

Github

글쓰기 / 관리자
hELLO · Designed By 정상우.
hyeon.s
알고리즘/공부

[알고리즘] 이진탐색 알고리즘 (Binary Search)

[알고리즘] 이진탐색 알고리즘 (Binary Search)
알고리즘/공부

[알고리즘] 이진탐색 알고리즘 (Binary Search)

2023. 1. 18. 21:11
728x90

이진탐색 알고리즘 (Binary Search) 란?

정렬된 배열에서 검색 범위를 반으로 줄여나가면서 해당 값이 배열안에 있는지를 찾는 알고리즘이다.

이진탐색 알고리즘은 반드시 정렬된 배열에서만 사용할 수 있다.

예시로 A라는 값을 찾으려고 할 때 맨 처음 A와 중간 값을 비교하고,

A가 더 크다면 중간에서 오른쪽을 탐색, A가 작다면 중간에서 왼쪽을 범위로 탐색을 한다.

이 과정을 반복하여 해당 값이 있는지를 찾아낸다.

 

사진과 같이 이진탐색이 이루어진다.

이진탐색 코드 구현

#include <iostream>
#include <algorithm>
using namespace std;

bool compare(int a, int b) {
	return a < b;
}
int main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	int arr[10] = { 1,7,8,3,9,11,6,75,6,31 };
	sort(arr, arr + 10, compare);
	int ans = 8;
	int low = 0;
	int hight = 9; // arr 사이즈 -1
	int mid;
	while (low <= hight) {
		mid = (low + hight) / 2;
		if (arr[mid] > ans) {
			hight = mid - 1;
		}
		else if (arr[mid] == ans) {
			cout << mid;
			return 0;
		}
		else if (arr[mid] < ans) {
			low = mid + 1;
		}
	}
}

조건문을 하나씩 보면

1. arr[mid] > ans 일 때

중간값이 찾고자 하는 값보다 큰 경우 이므로 탐색 범위를 중간값의 왼쪽으로 바꿔야한다.

따라서 hight = mid - 1 코드를 통해 탐색 범위의 최대값을 중간값보다 1 작은 값으로 세팅한다.

2. arr[mid] < ans 일 때

중간값이 찾고자 하는 값보다 작은 경우 이므로 탐색 범위를 중간값의 오른쪽으로 바꿔야한다.

따라서 low = mid + 1 코드를 통해 탐색 범위의 최소값을 중간값보다 1 큰 값으로 세팅한다.

 

이 과정을 반복해 arr[mid] == ans 조건에 들어오면 마침내 찾고자 하는 값의 위치를 찾았다는 것이다.

따라서 위치를 출력하고 종료한다.

 

728x90
저작자표시

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

[바킹독 알고리즘] 0x10강:다이나믹 프로그래밍  (0) 2023.01.22
[바킹독 알고리즘] 0x0A강:DFS in 다차원 배열  (0) 2023.01.22
[바킹독 알고리즘] 0x09강:BFS in 다차원 배열  (0) 2023.01.12
[바킹독 알고리즘] 0x08강:스택의 활용(수식의 괄호 쌍)  (0) 2023.01.09
[바킹독 알고리즘] 0x07강:Deque  (1) 2023.01.06
'알고리즘/공부' 카테고리의 다른 글
  • [바킹독 알고리즘] 0x10강:다이나믹 프로그래밍
  • [바킹독 알고리즘] 0x0A강:DFS in 다차원 배열
  • [바킹독 알고리즘] 0x09강:BFS in 다차원 배열
  • [바킹독 알고리즘] 0x08강:스택의 활용(수식의 괄호 쌍)
hyeon.s
hyeon.s
이유있는 코드를 짜자

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.