본문 바로가기
코딩test공부/백준python

2512.예산

by 왕방개 2024. 1. 11.

https://www.acmicpc.net/problem/2512

 

2512번: 예산

첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상

www.acmicpc.net

 

1.설명

문제에서 가능한 최대의 금액을 뽑아야하는 조건이 있습니다.따라서 리스트를 받고 나서 상한액을 점점 키우다가 만약 총 예산을 넘기면 그때 그 값의 -1 을 반환해야합니다. 상한액을 어떻게 키울까 하다가 이분탐색을 활용해 구했습니다. search 기법들은 나중에 한번에 정리해보겠습니다!!! 문제 자체는 이분 탐색(BInary search)이 어떻게 돌아가는지만 알면 문제 자체는 쉽게 풀 수 있었던거 같습니다. 매 탐색마다 예산과 money들을 비교하여 작은 것을 추가합니다.

 

2.코드

import sys

input=sys.stdin.readline
N=int(input())
money=list(map(int, input().split()))
M=int(input())
start,end=0,max(money)

while start<=end:
  mid=(start+end)//2
  current=0
  for i in money:
    if i >= mid:
      current+= mid
    else:
      current+=i
  if current <= M:
    start=mid+1
  else:
    end=mid-1
    
print(end)

 

'코딩test공부 > 백준python' 카테고리의 다른 글

2607.비슷한 단어  (0) 2024.01.16
20920.영단어 암기는 괴로워  (1) 2024.01.10
13305.주유소  (1) 2024.01.09
9017.크로스 컨트리  (1) 2024.01.08
1244.스위치 끄고 켜기  (2) 2024.01.04