BOJ - 2512

주의·2024년 1월 26일
0

boj

목록 보기
121/214

백준 문제 링크
예산

❓접근법

  1. 예산 요청 데이터를 array에 넣어주고 정렬한다.
  2. 초기값은 start = 1, end = max(array)로 지정한다.
  3. 기본 이분 탐색 코드에서,
    array의 원소가 mid보다 크거나 같으면 mid를 total에 더하고,
    array의 원소가 mid보다 작으면 원소를 total에 더한다.
  4. 그 다음 조건은 아래와 같다.
  • total이 목표 값 M보다 작거나 같으면
    start = mid + 1, answer에 mid를 넣어준다.
  • total이 목표 값 M보다 크다면
    end = mid - 1로 지정한다.
  1. 마지막으로 answer에서 가장 큰 값을 출력하면 끝!

👌🏻코드

N = int(input())

array = list(map(int, input().split()))
M = int(input())

array.sort()

start = 1
end = max(array)
answer = []

while start <= end:
    mid = (start + end) // 2
    
    total = 0
    for x in array:
        if mid <= x:
            total += mid
        else:
            total += x
            
    if total <= M:
        start = mid + 1
        answer.append(mid)
    else:
        end = mid - 1
        
print(max(answer))

0개의 댓글