남은 시간 동안 자원을 생산해 마지막 보유량을 최대화해요. 처음 보유량은 initial, 매분 기본 생산량은 rate예요.
매분 시작에 보유량이 cost 이상이면 자원을 cost만큼 내고 생산량을 늘릴 수 있어요. 한 번 늘릴 때마다 생산량이 처음의 rate만큼 증가해요. 늘리는 횟수는 전체 최대 2번, 한 분에는 최대 1번이에요. 늘린 생산량은 바로 그 분의 생산부터 적용돼요. 매분은 선택 후 생산 순서이며 생산 이후에는 다음 분까지 구매할 수 없어요.
int solution(int minutes, int initial, int rate, int cost)를 작성해 minutes 분 뒤 가능한 최대 보유량을 반환해 주세요. 늘리기는 선택 사항이며 0·1·2번 모두 가능해요.
minutes는 030, initial은 01000, rate는 110, cost는 11000인 정수예요. minutes=0이면 생산·구매 없이 initial을 반환해요. 마지막 보유량은 최대 1900으로 int 범위 안이에요. 최적 선택이 여러 개면 보유량만 반환해요.
예시 1: minutes = 3, initial = 2, rate = 2, cost = 2 → 14. 첫 분에 구매한 뒤 4를 생산해 4, 다음 분에 구매한 뒤 6을 생산해 8, 마지막 분에 6을 생산해 14가 돼요.
예시 2: minutes = 2, initial = 0, rate = 3, cost = 3 → 6. 첫 분에는 구매할 수 없어 3을 생산해요. 둘째 분에 구매하면 0+6=6, 구매하지 않아도 3+3=6이에요.
실행 입력은 minutes initial rate cost 네 정수예요. 아래 하네스가 함수를 호출하므로 solution만 작성해요.
예시 입력
3 2 2 2
예상 결과
14
예시 입력
2 0 3 3
예상 결과
6
핵심 개념
dp-1d: 이전 상태의 의미를 고정하고 현재 결과를 계산해요.brute-force: 입력 제한 안의 후보를 빠짐없이 비교해요.function-design: 보조 함수의 계약과 결과 조합을 확인해요.