Algorithm (PS)
Python 고정점 찾기
minjiwoo
2021. 11. 12. 00:38
728x90
문제에서 O(logN)으로 알고리즘을 설계하기를 요구했다 -> 선형탐색은 O(N) 이므로 부적합
데이터 셋이 오름차순으로 정렬되어 나오기 때문에 이진탐색을 선택함
mid 를 인덱스로 보고 array[mid] 값과 같으면 고정점이다 -> 이 값을 리턴
그렇지 않은 경우, array[mid] 실제 값이 더 크다면 반으로 뚝 자른 데이터들 중에서 오른쪽의 큰 값들을 탐색하면 된다.
더 작으면 왼쪽의 작은 값들을 탐색한다.
탐색 실패하면 None을 반환한다.
n = int(input())
array = list(map(int, input()))
def binary(array, start, end):
if start > end:
return None
mid = (start + end) // 2
if array[mid] == mid:
return mid
elif array[mid] < mid:
binary(array, mid+1, end)
else:
binary(array, start, mid-1)
count = binary(array, 0, n-1)
if count == 0:
print(-1)
else:
print(count)
728x90