본문으로 이동
코드패스 by Devin.KR

문제 4710 · 킬로 V

반납 도서 스캔 묶음

댓글 0
인증 제출 통계 · 5분마다 갱신 · 정답 비율 = 정답 제출 / 전체 제출
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1000ms측정하지 않음0000.00%

문제

도서관의 반납 처리대에는 책 N권이 한 줄로 놓여 있다. 책에는 현재 놓인 순서대로 1번부터 N번까지 번호가 붙어 있다. 반납 처리 장치는 각 책의 식별 정보와 표지 상태를 스캔해야 하며, 모든 책을 정확히 한 번씩 처리한 뒤 작업을 마쳐야 한다. 장치는 한 번에 책 한 권을 처리하거나, 현재 줄에서 서로 이웃한 두 권을 함께 처리할 수 있다. 작업 중에 책의 순서를 바꾸거나 다른 위치로 옮길 수는 없다. 이를 작업 계획의 관점에서 보면, 처음 주어진 책의 줄을 길이가 1 또는 2인 연속한 묶음들로 나누는 것이다. 각 책은 정확히 하나의 묶음에 속해야 하고, 서로 다른 묶음이 같은 책을 포함할 수는 없다. 세 권 이상을 한 묶음으로 처리하는 기능은 없다. 책 i를 혼자 처리하는 데 필요한 시간은 A_i다. 책 i와 책 i+1을 한 묶음으로 처리하는 데 필요한 시간은 B_i다. 두 권을 함께 처리할 때는 B_i만 사용하며, 그 두 책의 A 값을 추가로 더하지 않는다. 함께 처리하는 시간은 두 책의 두께나 표지 조합에 따라 달라진다. 따라서 B_i가 A_i와 A_{i+1}의 합보다 작을 수도 있고, 같거나 클 수도 있다. 입력으로 주어진 값 외에 별도의 준비 시간이나 묶음 사이의 전환 시간은 없다. 장치는 한 번에 한 묶음만 처리하므로 전체 작업 시간은 선택한 모든 묶음의 처리 시간을 더한 값이다. 일부 책은 사전 확인이 끝나 처리 시간이 0일 수 있으며, 두 권 묶음의 시간도 0일 수 있다. 시간이 0인 경우에도 해당 책을 처리하는 묶음은 반드시 계획에 포함해야 한다. 예를 들어 네 권의 책은 네 권을 각각 처리하거나, 앞의 두 권과 뒤의 두 권을 각각 묶거나, 가운데 두 권만 묶고 양 끝을 따로 처리할 수 있다. 반면 1번과 3번 책을 묶는 계획은 허용되지 않는다. 가능한 모든 작업 계획 중 전체 작업 시간이 가장 짧은 계획의 시간을 구한다. 최적 계획이 여러 개여도 계획 자체는 출력하지 않는다.

입력

첫째 줄에 책의 수를 나타내는 정수 N이 주어진다. 1 ≤ N ≤ 20,000이다.
둘째 줄에 정수 A_1, A_2, ..., A_N이 공백으로 구분되어 주어진다.
N이 2 이상이면 셋째 줄에 정수 B_1, B_2, ..., B_{N-1}이 공백으로 구분되어 주어진다. N이 1이면 셋째 줄은 주어지지 않는다.
모든 A_i와 B_i는 0 이상 1,000,000 이하의 정수이며, 시간의 단위는 밀리초다.

출력

모든 책을 정확히 한 번씩 처리하는 데 필요한 전체 작업 시간의 최솟값을 밀리초 단위 정수로 출력한다. 최적 계획이 여럿이어도 최솟값 하나만 출력한다.

예제 입력 1

5
6 8 3 7 4
9 20 5 8

예제 출력 1

18

예제 입력 2

1
0

예제 출력 2

0

예제 입력 3

4
5 5 5 5
20 1 20

예제 출력 3

11
힌트 펼치기
  • 앞에서부터 i권을 모두 처리하는 데 필요한 최소 시간을 정의한다.
  • 마지막 묶음이 한 권인 경우와 두 권인 경우로 나누면 더 짧은 접두 구간의 답을 사용할 수 있다.

관련 서재 장

관련 장

출처: Devin.KR 자체 제작

알고리즘 분류동적 계획법

풀이 작성

연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.

JavaScript 시간 제한 = 문제 시간 제한 × 1 + 0초. 문제별 예외는 아래 표에 반영됩니다.

Node.js 전체 API는 지원하지 않습니다.

Ctrl+Enter: 연습 채점 · Tab: 들여쓰기 · Esc 후 Tab: 다음 요소로 이동. 언어별 초안은 이 브라우저에 저장됩니다. JavaScript 입력: require('fs').readFileSync(0, 'utf8'), readline 또는 input().

로그인하면 인증 제출을 사용할 수 있습니다.

풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.

    연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.

    이 브라우저의 연습 기록

      댓글 0

      로그인하면 댓글을 쓸 수 있습니다.

      댓글 접기·펼치기

      언어별 제한

      테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.

      언어엔진(버전)시간 제한메모리
      JavaScript브라우저 JavaScript1000ms / 테스트측정하지 않음
      TypeScriptTypeScript 5.9.31000ms / 테스트측정하지 않음
      Python 3Pyodide 314.0.7 (CPython 3.14 WASM)5000ms / 테스트측정하지 않음
      CYoWASP Clang 222000ms / 테스트측정하지 않음
      C++YoWASP Clang 22 / libc++2000ms / 테스트측정하지 않음
      JavaOpenJDK javac + TeaVM (Java 21 문법)3000ms / 테스트측정하지 않음
      LuaWasmoon 1.16.0 / Lua 5.43000ms / 테스트측정하지 않음
      RubyRuby 3.4 / ruby.wasm 2.10.15000ms / 테스트측정하지 않음
      SchemeBiwaScheme 0.8.35000ms / 테스트측정하지 않음
      PrologSWI-Prolog / swipl-wasm 8.2.55000ms / 테스트측정하지 않음
      PerlPerl 5.28 / WebPerl 0.09-beta5000ms / 테스트측정하지 않음