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

문제 4639 · 킬로 III

캠핑장 운반 카트 교대

인증 제출 통계 · 5분마다 갱신 · 정답 비율 = 정답 제출 / 전체 제출
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1000ms / 테스트 (언어별 보정은 아래 표)메모리: 측정하지 않음(브라우저 채점)0000.00%

문제

캠핑장의 보급 통로에는 입구부터 목적지까지 일렬로 놓인 거점들이 있다. 입구는 0번 거점이고 목적지는 N번 거점이며, 이웃한 두 거점 사이의 거리는 모두 같다. 관리자는 입구에 있는 짐 하나를 목적지까지 옮기려 한다. 짐은 각 거점에 준비된 운반 카트에 실어 이동하며, 사용한 카트의 수를 최소화하려 한다. 0번부터 N-1번까지의 각 거점에는 아직 사용하지 않은 카트가 하나씩 있다. i번 거점의 카트에는 이동 한도 A_i가 표시되어 있다. 이 카트를 사용하면 짐을 i번 거점에서 출발시켜 i보다 크고 i+A_i 이하인 번호의 거점 중 하나까지 옮길 수 있다. 목적지를 넘어갈 필요는 없으므로 도착 거점의 번호는 N 이하여야 한다. 이동 거리는 정수 개의 구간으로 정하며, 한도보다 짧게 이동하는 것도 허용한다. 카트 한 대를 사용하는 작업은 출발 거점에서 짐을 싣고 선택한 도착 거점에서 내리는 것까지다. 이동 도중 다른 거점의 카트로 바꿀 수는 없다. 도착한 거점이 목적지가 아니라면 그 거점에 준비된 카트를 새로 사용하여 다음 이동을 시작한다. 이미 사용한 카트를 다시 사용하거나, 다른 거점의 카트를 가져와 사용하는 것은 허용하지 않는다. 이동은 항상 번호가 증가하는 방향으로만 이루어지므로 지나온 거점으로 돌아갈 수도 없다. 이동 한도가 0인 카트는 짐을 다음 거점으로 옮길 수 없다. 따라서 그런 거점에 도착하면 목적지가 아닌 한 더 진행할 수 없다. 어떤 거점의 카트가 멀리 이동할 수 있더라도 그 거점까지 짐을 가져갈 방법이 없으면 이용할 수 없다. 목적지에 도착한 뒤에는 카트를 추가로 사용할 필요가 없다. 가능한 운반 경로가 여러 개이면 경로 자체는 구분하지 않고 사용한 카트 수의 최솟값만 구한다. 모든 거점의 이동 한도가 주어졌을 때 필요한 최소 카트 수를 구하고, 목적지까지 운반할 수 없다면 -1을 출력한다.

입력

첫째 줄에 정수 N이 주어진다. 1 ≤ N ≤ 200,000이다.
둘째 줄에 정수 A_0, A_1, ..., A_(N-1)이 공백으로 구분되어 주어진다. 0 ≤ A_i ≤ 10^9이다. N번 거점은 목적지이므로 해당 거점의 카트 정보는 주어지지 않는다.

출력

짐을 0번 거점에서 N번 거점까지 옮기는 데 필요한 최소 카트 수를 정수 하나로 출력한다. 운반할 수 없으면 -1을 출력한다.

예제 입력 1

7
3 1 4 1 0 2 1

예제 출력 1

3

예제 입력 2

5
2 0 0 4 1

예제 출력 2

-1

예제 입력 3

4
4 0 0 0

예제 출력 3

1
힌트 펼치기
  • 카트를 k대 이하로 사용하여 도달할 수 있는 가장 먼 거점을 관리한다.
  • 현재 도달 가능한 범위의 카트들을 조사하면 다음 카트 한 대로 확장할 수 있는 범위를 구할 수 있다.

관련 서재 장

관련 장

출처: Devin.KR 자체 제작

알고리즘 분류그리디

풀이 작성

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

Python 기본 시간 제한 = 문제 시간 제한 × 3 + 2초. 문제별 예외는 아래 표에 반영됩니다. 표준 라이브러리만 지원합니다.

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

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

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

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

    이 브라우저의 연습 기록

      언어별 제한

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

      언어엔진(버전)시간 제한메모리
      javascript사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름)1000ms / 테스트측정하지 않음(브라우저 채점)
      pythonPyodide 314.0.7 (CPython 3.14 WASM)5000ms / 테스트측정하지 않음(브라우저 채점)