Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 노마드코더리액트
- 백준문제풀이
- 코테 공부
- 프로그래머스 17683 파이썬
- 17677 파이썬
- 코딩테스트공부
- 우박수열 파이썬
- 프로그래머스 134239 파이썬
- 방금그곡 파이썬
- 백준 타일링 문제
- 프로그래머스 우박수열
- 리액트 훅
- 리액트 독학
- PostgreSQL
- 우박수열 정적분 파이썬
- 프로그래머스 카카오코테
- 프로그래머스 방금그곡
- 프로그래머스
- 코테공부
- 프로그래머스파이썬
- 리액트 공부정리
- 카카오코테
- 노마드코더 리액트 노트정리
- 리액트공부
- 노마드코더
- 뉴스 클러스터링 파이썬
- 2022카카오코테
- 백준 DP 문제풀이
- 프로그래머스 17677
- 노마드코더 리액트
Archives
- Today
- Total
My Develop Log
[백준] (이진탐색) - 6236 용돈 관리 본문
문제
현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로 하였다. 현우는 통장에서 K원을 인출하며, 통장에서 뺀 돈으로 하루를 보낼 수 있으면 그대로 사용하고, 모자라게 되면 남은 금액은 통장에 집어넣고 다시 K원을 인출한다. 다만 현우는 M이라는 숫자를 좋아하기 때문에, 정확히 M번을 맞추기 위해서 남은 금액이 그날 사용할 금액보다 많더라도 남은 금액은 통장에 집어넣고 다시 K원을 인출할 수 있다. 현우는 돈을 아끼기 위해 인출 금액 K를 최소화하기로 하였다. 현우가 필요한 최소 금액 K를 계산하는 프로그램을 작성하시오.
입력
1번째 줄에는 N과 M이 공백으로 주어진다. (1 ≤ N ≤ 100,000, 1 ≤ M ≤ N)
2번째 줄부터 총 N개의 줄에는 현우가 i번째 날에 이용할 금액이 주어진다. (1 ≤ 금액 ≤ 10000)
출력
첫 번째 줄에 현우가 통장에서 인출해야 할 최소 금액 K를 출력한다.
예제 입력 1
7 5
100
400
300
100
500
101
400
예제 출력 1
500
문제 풀이
import sys
def binary_search(start,end,M,charges):
result=0 # 이분탐색을 진행하며 만족하는 값을 저장해나갈 변수
max_charge=max(charges)
while start<=end: # 이분탐색 진행
mid=(start+end)//2
cnt=0
money=0
# 인출 가능 금액이 하루 charge 보다 작은 경우 start = mid + 1
if mid < max_charge:
start=mid+1
continue
for minus_money in charges:
# 하루 charge인 minus_money가 현재 들고 있는 money 보다 클 경우 인출
if minus_money > money:
cnt+=1
money=mid
money -= minus_money # 하루 charge 마이너스 처리
# cnt가 M 보다 클 경우는 start 값을 키우기(start = mid + 1)
if cnt>M:
start=mid+1
# cnt가 M 보다 작거나 같을 경우는 end 값을 줄이기(end = mid - 1)
else:
result=mid
end=mid-1
return result
input=sys.stdin.readline
N,M=map(int,input().rstrip().split()) # N,M 입력 받기
charges = list(int(input()) for _ in range(N)) # 비용 입력받기
print(binary_search(min(charges),sum(charges),M,charges))
Reference
https://www.acmicpc.net/problem/6236
6236번: 용돈 관리
현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 쓰기로
www.acmicpc.net
'코테 공부 > 백준' 카테고리의 다른 글
[백준] 1012 유기농 배추 (0) | 2023.04.19 |
---|---|
[백준] (BFS/DFS) - 10026 적록색약 (0) | 2023.04.07 |
[백준] (이분탐색) - 1072 게임 (0) | 2023.03.13 |
[백준] (그리디) - 1541 잃어버린 괄호 (0) | 2023.03.03 |
[백준] (백트래킹) - 9095 1, 2, 3 더하기 (0) | 2023.01.28 |