3개지 변수 시작점, 중간점, 끝점을 이용하여 찾으려는 데이터와 중간점에 위치한 데이터를 반복적으로 비교하여 원하는 데이터를 찾는 것

탐색 범위가 2000만을 넘어가면 이진 탐색을 떠올려보자 => log(n)의 시간 복잡도가 필요한 경우

 

# 재귀 함수를 통한 이진 탐색
def binary_search(array, target, start, end):
    # 탐색 결과 일치하는게 없는 경우
    if start > end:
        return None
    mid = (start + end) // 2
    # 중간 지점이 찾는 데이터와 일치하는 경우
    if array[mid] == target:
        return mid
    # 중간 지점의 데이터가 찾는 데이터보다 클 경우
    elif array[mid] > target:
        return binary_sort(array, target, start, mid - 1)
    # 중간 지점의 데이터가 찾는 데이터보다 작은 경우
    else:
        return binary_sort(array, target, mid + 1, end)


# n(원소의 개수)과 target(찾고자 하는 문자열)을 입력하기
n, target = map(int, input().split())

# 전체 원소 입력받기
array = list(map(int, input().split()))

# 결과 출력
result = binary_search(array, target, 0, n - 1)

if result == None:
    print("원소가 존재하지 않습니다.")
else:
    print(result+1)

 

 

 

 

# 반복문을 이용한 이진 탐색
def binary_search(array, target, start, end):
    while start<=end:
        mid = (start + end) // 2
        # 찾은 경우 중간 지점 인덱스 반환
        if array[mid] == target:
            return mid
        # 중간 지점 데이터보다 찾는 데이터 값이 작은 경우
        elif array[mid] > target:
            end = mid -1

        # 중간 지점 데이터보다 찾는 데이터 보다 값이 큰 경우
        else:
            start = mid + 1

    return None

# n(원소의 개수)과 target(찾고자 하는 문자열)을 입력하기
n, target = map(int, input().split())

# 전체 원소 입력받기
array = list(map(int, input().split()))

# 결과 출력
result = binary_search(array, target, 0, n - 1)

if result == None:
    print("원소가 존재하지 않습니다.")
else:
    print(result+1)

'Algorithm' 카테고리의 다른 글

람다 표현식  (0) 2021.04.26
트리 자료구조 - 이진 탐색 트리  (0) 2021.04.16
BOJ - 15649번 - N과 M (1)  (0) 2021.04.15
BOJ - 18870번 - 좌표 압축  (0) 2021.04.08
BOJ - 11651번 - 좌표 정렬하기 2  (0) 2021.04.08

+ Recent posts