6236번: 용돈 관리
문제 현우는 용돈을 효율적으로 활용하기 위해 계획을 짜기로 하였다. 현우는 앞으로 N일 동안 자신이 사용할 금액을 계산하였고, 돈을 펑펑 쓰지 않기 위해 정확히 M번만 통장에서 돈을 빼서 ��
www.acmicpc.net
분할정복과 이분탐색이 섞인 문제인거같다. 이분탐색 풀이법이 생각나지 않아 다른사람들의 풀이법을 참고하였다. 3일 후에 다시한번 풀어봐야 겠다.
#include <iostream>
#include <vector>
using namespace std;
vector<int> dayMoney;
int N, M, sum;
bool Solution(int money)
{
int temp = money, withdraw = 1;
for (int i = 0; i < N; i++)
{
if (dayMoney[i] > money)
return false;
if (temp - dayMoney[i] < 0)
{
temp = money;
withdraw++;
}
temp -= dayMoney[i];
}
return M >= withdraw;
}
int main(void)
{
cin >> N >> M;
for (int i = 0; i < N; i++)
{
int n;
cin >> n;
dayMoney.push_back(n);
sum += n;
}
// binary_search //
int start = 1, end = sum; // sum은 M이 1인 모든 금액을 더한 값
int result;
while (start <= end)
{
int mid = (start + end) / 2;
if (Solution(mid)) // 인출횟수가 M보다 작거나 같음 -> 인출금을 줄여보자
{
result = mid;
end = mid -1;
}
else
start = mid + 1;
}
cout << result << endl;
return 0;
}
알고리즘 200일 프로젝트 - 39day
'알고리즘 > BOJ' 카테고리의 다른 글
백준 10815번: 숫자 카드 (0) | 2020.05.19 |
---|---|
백준 1620번: 나는야 포켓몬 마스터 이다솜 (0) | 2020.05.18 |
백준 1780번: 종이의 개수 (0) | 2020.05.12 |
백준 1992번: 쿼드트리 (0) | 2020.05.12 |
백준 1074번: Z (2) | 2020.05.12 |