프로그래머스 - 예산
예산
문제
국가의 역할 중 하나는 여러 지방의 예산요청을 심사하여 국가의 예산을 분배하는 것입니다. 국가예산의 총액은 미리 정해져 있어서 모든 예산요청을 배정해 주기는 어려울 수도 있습니다. 그래서 정해진 총액 이하에서 가능한 한 최대의 총 예산을 다음과 같은 방법으로 배정합니다.
1 | 1. 모든 요청이 배정될 수 있는 경우에는 요청한 금액을 그대로 배정합니다. |
예를 들어, 전체 국가예산이 485이고 4개 지방의 예산요청이 각각 120, 110, 140, 150일 때, 상한액을 127로 잡으면 위의 요청들에 대해서 각각 120, 110, 127, 127을 배정하고 그 합이 484로 가능한 최대가 됩니다.
각 지방에서 요청하는 예산이 담긴 배열 budgets과 총 예산 M이 매개변수로 주어질 때, 위의 조건을 모두 만족하는 상한액을 return 하도록 solution 함수를 작성해주세요.
제한 사항
지방의 수는 3 이상 100,000 이하인 자연수입니다.
각 지방에서 요청하는 예산은 1 이상 100,000 이하인 자연수입니다.
총 예산은 지방의 수 이상 1,000,000,000 이하인 자연수입니다.
입출력 예
budgets M return
[120, 110, 140, 150] 485 127
문제 링크
https://programmers.co.kr/learn/courses/30/lessons/43237
solve
- 지원한 예산중 최댓값을 right로, left를 1로 하여 이분 탐색을 수행한다.
- check함수에서 현재 값으로 예산을 맞출 수 있다면 true, 아니라면 false를 리턴한다.
- 현재 상한액보다 예산 요청 값이 작으면 예산 요청 값을, 상한액 이상이면 상한액을 누적한다.
- 누적된 값이 전체 예산보다 작거나 같은지 판별한다.
코드 설명
1 |
|