똥그래미 코딩공장
백준 2512번(예산) 파이썬 본문
https://www.acmicpc.net/problem/2512
2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
음... 지금까지 풀었던 BS문제들과 비슷한 문제다.
조금만 생각하면 쉽게 풀 수 있는 문제다.
금방 풀어서 별 코멘트가 없다.
아래는 코드와 설명이다.
import sys
input = sys.stdin.readline
n = int(input())
region = list(map(int,input().split()))
m = int(input())
ans = []
def bs(array,t,start,end):
total = 0 # 값을 더해줄 total 변수
if start > end:
return None
mid = (start+end)//2 # 상한선 구하기
for i in array: # 배열에 있는 값을 상한선과 비교하여 더해줌
if i >= mid: # 배열에 있는 값이 상한선이랑 같거나 크면
total+=mid # 상한선을 더해준다
else: #반대의 경우
total+=i # 배열의 있는 값을 더해준다
if(total<=t): # 다 더한값이 m의 값보다 작거나 같을때
ans.append(mid) # 정답리스트에 추가
return bs(array,t,mid+1,end) # 시작점을 상한선+1로 두고 재귀
else:
return bs(array,t,start,mid-1) #도착점을 상한선-1로 두고 재귀
bs(region,m,0,max(region))
print(max(ans)) #정답 리스트에서 최댓값 출력
끝!!
'Algorithm' 카테고리의 다른 글
| 백준 2156번(포도주 시식) 파이썬 (0) | 2023.02.08 |
|---|---|
| 백준 14888번(연산자 끼워넣기) 파이썬 (0) | 2023.02.07 |
| 백준 2636번(치즈) 파이썬 (1) | 2023.02.05 |
| 백준 15650번(N과M(2)) 파이썬 (0) | 2023.02.03 |
| 백준 1654번(랜선 자르기) 파이썬 (0) | 2023.02.02 |