[이코테] 이진 탐색_고정점 찾기 (python)

juyeon·2022년 7월 5일
0

문제

나의 풀이

1. 함수 만들어서.. 재귀함수로

import sys
input = sys.stdin.readline

n = int(input())
arr = list(map(int, input().split()))

def search(arr, target, start, end):
	if start > end: #고정점이 없다면 -1 반환
		return -1
	mid = (start + end) // 2 #중간점 설정
	
	if arr[mid] = mid: #원소 값이 인덱스와 동일할 때
		return mid #중간점 반환
	
    #원소 값이 인덱스와 동일하지 않다면, 범위 좁혀나가기
	elif arr[mid] > mid:
		return search(arr, target, start, mid - 1)
	
	else:
		return search(arr, target, mid + 1, end)
        
print(search(arr, x, 0, n))

2. 그냥 전형적인 이진탐색으로

n = int(input())
arr = list(map(int, input().split()))

start = 0
end = n - 1
for i in arr:
    mid = (start + end) // 2
    if mid == arr[mid]:
        print(mid)
        break
    elif mid > arr[mid]:
        start = mid + 1
    else: # mid < arr[mid]
        end = mid - 1
        
    if end < start:
        print(-1)
        break
profile
내 인생의 주연

0개의 댓글