728x90
- 풀이
- 시간복잡도 O(logN)으로 설계
- 오름차순으로 정렬된 수열에서 특정 수의 개수 구하기
- 이진 탐색
- 시작위치, 마지막 위치 찾기
- 이진 탐색
- 코드
import sys
input = sys.stdin.readline
# 원소의 개수
N = int(input())
# 원소
arr = list(map(int,input().split()))
s = 0
e = N-1
flag = False
while s <= e:
mid = (s+e)//2
# 고정점인가?
if arr[mid] == mid:
flag = True
break
# 값이 인덱스보다 작은가? -> 오른쪽 확인
if arr[mid] < mid:
s = mid + 1
# 값이 인덱스보다 큰가? -> 왼쪽 확인
elif arr[mid] > mid:
e = mid - 1
# 고정점이 있는가?
if flag:
print(mid)
else:
print(-1)
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
이것이 취업을 위한 코딩 테스트다 CHAPTER 15 이진 탐색 문제 (0) | 2023.03.09 |
---|---|
이코테 Q.29 공유기 설치 (0) | 2023.03.09 |
[프로그래머스] 가사 검색 - Python (0) | 2023.03.08 |
[프로그래머스] [3차] 압축 - Python (0) | 2023.03.08 |
이코테 Q.27 정렬된 배열에서 특정 수의 개수 구하기 (0) | 2023.03.08 |
댓글