728x90
SMALL
문제
https://www.acmicpc.net/problem/2512
2512번: 예산
첫째 줄에는 지방의 수를 의미하는 정수 N이 주어진다. N은 3 이상 10,000 이하이다. 다음 줄에는 각 지방의 예산요청을 표현하는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 값들은 모두 1 이상
www.acmicpc.net
풀이
이진탐색으로 해결했다.
1. start를 1, max를 입력받은 가장 큰 예산으로 설정한다.
2. start가 end보다 커지기 전까지 반복한다 (이진탐색)
2-1. mid는 star와 end의 중간값 = 예산 값이다
2-2. 예산값이 요청받은 예산값도가 크면 요청받은 값을그대로, 작으면 예산값만큼만 result에 더한다
2-3 result값이 국가예산의 총액(M)보다 크면 예산을 더 줄여야하므로 end값을 현재 예산값(mid)보다 줄인다
2-4 result값이 국가예산의 총액(M)보다 작으면 최댓값을 찾기 위해 start값을 현재 예산값(mid)보다 늘린다
import sys
N =int(sys.stdin.readline())
money=list(map(int,sys.stdin.readline().split(' ')))
M=int(sys.stdin.readline())
start=1
end=max(money)
while(start<=end): #이진 탐색
mid=(start+end)//2
result=0
for i in money:
if mid>i:
result+=i
else:
result+=mid
if result>M:
end = mid - 1
else :
start = mid + 1
print(end)
😣덧)
처음에 if result>=M 으로 써서 틀렸다.
최댓값을 찾는 문제이기 때문에 result가 같은경우에는 start를 키워야한다!
728x90
LIST
'코테공부 > python 백준' 카테고리의 다른 글
파이썬 백준 1260 : DFS와 BFS (0) | 2024.04.02 |
---|---|
파이썬 백준 2805번: 나무 자르기 (0) | 2024.03.29 |
파이썬 백준 1654번: 랜선 자르기 (0) | 2024.03.29 |
파이썬 백준 10799번: 쇠막대기 (0) | 2024.03.27 |
파이썬 백준 1406번: 에디터 (0) | 2024.03.27 |