백준 2512번: https://www.acmicpc.net/problem/2512
2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
--
import sys
n = int(sys.stdin.readline())
budget = list(map(int, sys.stdin.readline().split()))
m = int(sys.stdin.readline())
_max = max(budget)
_min = 1
while _max >= _min:
mid = (_max + _min) // 2
res = 0
for i in budget:
if mid < i:
res += mid
else:
res += i
if res > m:
_max = mid - 1
else:
_min = mid + 1
print(_max)
이분 탐색 (Binary Search) : 찾고자 하는 수를 두 부분으로 나누어서 찾는 기법으로
순차 탐색(linear search)보다 더 빠름!
이분 탐색의 탐색 순서:
- 탐색 리스트가 정렬이 되어 있지 않다면 정렬
- left, right, mid를 잡아줌 (리스트 첫 번째는 left, 리스트 마지막은 right, 리스트의 중간 값은 mid
- 여기서 값보단 리스트의 인덱스로 잡는 것이 더 범용적으로 사용할 수 있음
- mid 값과 찾고자 하는 값 비교
- mid값이 더 크면 right 값을 mid -1, mid값이 더 작으면 left값을 mid + 1로 세팅
- left > right가 될 때까지 2~4번 반복
'22-1 하계 모각코' 카테고리의 다른 글
TIL::0806_boj 16918 (0) | 2022.08.07 |
---|---|
TIL::0803_boj 14620 (0) | 2022.08.05 |
TIL::0730_boj 11501 (0) | 2022.08.01 |
TIL::0727_boj 2002 (0) | 2022.07.29 |
TIL::0723_연결 요소/boj_11724번 (0) | 2022.07.23 |