알고리즘(백준)/이분탐색
[알고리즘/이분 탐색] 6236번 : 용돈 관리 - python
되다
2024. 2. 10. 21:48
링크 : https://www.acmicpc.net/problem/6236
6236번: 용돈 관리
현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로
www.acmicpc.net
- 문제
- 소요시간: 1시간(19%) 실패
- 설계하기(접근방법)
1. 입력받기
쓸 돈을 입력받는다
양이 많으니
sys를 통해 입력받자
2. 구현하기
start를 잘못 잡았다
start값은 항상 쓸돈의 최대치보다는 커야하는데
평균으로 구해버렸다
start = max(plan)
end = sum(plan) -> 동전 플랜의 총합
으로 잡고 이진탐색을 해준다
만약 현재 잔액이 쓸 돈보다 큰 경우
잔액에서 쓸 돈을 빼준다
만약 부족한 경우에는
현재 금액을 반납하고
mid 금액으로 초기화해준 후
잔액에서 쓸 돈을 빼준다
3. 출력하기
마지막 start 값을 출력한다
- 코드(출력)
import sys
input = sys.stdin.readline
day, trial = map(int,input().split())
plan = [int(input()) for _ in range(day)]
start = max(plan)
end = sum(plan)
while start <= end:
mid = (start + end) // 2
budget = mid
cnt = 1
for i in plan:
if budget < i:
# 반납 후 인출
budget = mid
# 인출 횟수
cnt += 1
# 차감
budget -= i
if cnt > trial :
start = mid + 1
else:
end = mid - 1
print(start)
- 얻어갈 부분
1. 이진 탐색의 경우 start와 end값을 잘 잡아야 한다는 것을 배웠다.