22-1 하계 모각코

TIL::0721_이분 탐색/boj_2512번

ganni_2 2022. 7. 21. 23:19

백준 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)보다 더 빠름!

 

이분 탐색의 탐색 순서:

  1. 탐색 리스트가 정렬이 되어 있지 않다면 정렬
  2. left, right, mid를 잡아줌 (리스트 첫 번째는 left, 리스트 마지막은 right, 리스트의 중간 값은 mid
    1. 여기서 값보단 리스트의 인덱스로 잡는 것이 더 범용적으로 사용할 수 있음
  3. mid 값과 찾고자 하는 값 비교
  4. mid값이 더 크면 right 값을 mid -1, mid값이 더 작으면 left값을 mid + 1로 세팅
  5. 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