← 실전 문제

두 번까지 생산량 늘리기

C++완성형

남은 시간 동안 자원을 생산해 마지막 보유량을 최대화해요. 처음 보유량은 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: 보조 함수의 계약과 결과 조합을 확인해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기