문제 4905 · 킬로 III
메신저 알림 포장
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
어느 회사의 사내 메신저는 직원이 자리를 비운 동안 쌓인 알림을 한 번에 전달하는 기능을 준비하고 있다. 전달할 알림은 총 N개이며, 발생한 순서대로 1번부터 N번까지 번호가 붙어 있다. 각 알림에는 내용을 화면에 표시하는 데 필요한 자원의 양을 나타내는 표시값이 정해져 있다. 메신저는 알림의 순서를 바꾸거나 일부 알림을 생략할 수 없다. 전달을 시작하기 전에 전체 알림을 여러 꾸러미로 나누어야 한다. 각 꾸러미에는 원래 순서에서 연속한 알림을 하나 이상 세 개 이하로 넣는다. 모든 알림은 정확히 하나의 꾸러미에 들어가야 하며, 서로 다른 꾸러미가 같은 알림을 포함할 수 없다. 꾸러미의 크기는 각각 독립적으로 정할 수 있으므로, 한 개짜리 꾸러미와 두 개짜리 꾸러미, 세 개짜리 꾸러미를 자유롭게 섞어 사용해도 된다. 알림 하나만 들어 있는 꾸러미는 별도의 포장 처리가 필요하지 않다. 이 꾸러미의 전송 비용은 그 알림의 표시값과 같다. 알림 두 개 또는 세 개가 들어 있는 꾸러미는 공통 화면을 만드는 포장 처리가 필요하다. 이때 전송 비용은 꾸러미에 속한 알림의 표시값 중 최댓값에 포장 비용 C를 더한 값이다. 표시값이 같은 알림이 여러 개 있어도 최댓값은 한 번만 더하며, C 역시 꾸러미마다 한 번만 더한다. 전체 전송 비용은 모든 꾸러미의 전송 비용을 더한 값이다. 꾸러미를 나누는 위치에 따라 전체 비용이 달라질 수 있다. 포장 비용이 크면 알림을 하나씩 보내는 편이 유리할 수도 있으므로, 가능한 경우에 항상 여러 알림을 묶어야 하는 것은 아니다. 모든 알림의 표시값과 포장 비용이 주어질 때, 전체 전송 비용의 최솟값을 구하는 프로그램을 작성한다. 최솟값을 만드는 분할이 여러 개여도 비용만 구한다.
입력
첫째 줄에 알림의 수 N과 포장 비용 C가 공백으로 구분되어 주어진다. 둘째 줄에 알림의 표시값 A_1, A_2, ..., A_N이 순서대로 주어진다. 모든 입력값은 정수이며 1≤N≤60,000, 0≤C≤9, 1≤A_i≤9다.
출력
모든 알림을 전달하는 전체 전송 비용의 최솟값을 정수 하나로 출력한다.
예제 입력 1
4 2 4 1 5 2
예제 출력 1
9
예제 입력 2
3 9 1 1 1
예제 출력 2
3
예제 입력 3
5 0 3 3 3 3 3
예제 출력 3
6
힌트 펼치기
- 앞에서부터 i개의 알림을 전달하는 최소 비용을 생각한다.
- 마지막 꾸러미에 들어 있는 알림의 수는 1, 2, 3 중 하나다.
관련 서재 장
알고리즘 분류
동적 계획법풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |