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

문제 4390 · 바이트 II

겹겹이 묶은 쇼핑 꾸러미

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

문제

온라인 쇼핑몰은 상품과 꾸러미를 같은 방식으로 다루는 묶음 할인 행사를 연다. 상품 하나는 정해진 양의 정수 가격을 가진다. 꾸러미 하나는 정확히 두 개의 구성품을 가지며, 각 구성품은 상품 하나이거나 다른 꾸러미 하나다. 전체 구매 대상은 가장 바깥의 상품 또는 꾸러미 하나로 표현된다. 같은 상품을 여러 곳에서 공유하는 구조는 없으며, 각 구성품은 자신이 들어 있는 위치에서 한 번만 계산한다. 꾸러미의 결제 금액은 두 구성품의 결제 금액을 먼저 구한 뒤 정한다. 두 금액 중 큰 금액은 전부 내고, 작은 금액은 절반만 낸다. 작은 금액이 홀수라면 절반에서 소수 부분을 버린다. 따라서 두 구성품의 금액이 A와 B일 때 꾸러미의 결제 금액은 max(A, B) + floor(min(A, B) / 2)다. 두 금액이 같아도 어느 쪽을 절반으로 계산하든 결과는 같다. 이 할인은 각 꾸러미에서 반드시 한 번 적용하며, 적용 여부를 선택하거나 구성품을 다른 꾸러미로 옮길 수는 없다. 안쪽 꾸러미에서 계산한 결제 금액은 바깥 꾸러미에서 하나의 구성품 금액으로 사용한다. 바깥 꾸러미가 안쪽의 개별 상품 가격을 직접 비교하지는 않는다. 계산 과정마다 해당 꾸러미의 작은 금액을 절반으로 줄이고 소수 부분을 버리므로, 모든 상품 가격을 더한 뒤 한꺼번에 할인해서는 안 된다. 쇼핑몰은 이 구조를 정수 나열로 저장한다. 상품은 자신의 가격을 나타내는 양의 정수 하나로 기록한다. 꾸러미는 먼저 0을 기록하고, 첫 번째 구성품의 기록 전체와 두 번째 구성품의 기록 전체를 차례대로 이어 붙여 기록한다. 예를 들어 가격이 14인 상품과 가격이 9인 상품을 묶은 꾸러미의 기록은 0 14 9다. 0은 가격이 아니라 뒤에 두 구성품이 이어진다는 표시다. 입력에는 이러한 규칙으로 만든 완전한 구매 대상 하나가 주어진다. 가장 바깥 대상이 상품 하나뿐인 경우도 있다. 기록을 중간에서 끊거나 남는 정수를 덧붙인 입력은 주어지지 않는다. 기록에 나타나는 구성 관계와 각 단계의 할인 규칙을 그대로 적용하여, 가장 바깥 구매 대상의 최종 결제 금액을 구한다.

입력

첫째 줄에 기록에 포함된 정수의 개수 N이 주어진다. N은 1 이상 19,999 이하의 홀수다.
둘째 줄에 기록을 나타내는 N개의 정수가 공백으로 구분되어 주어진다. 각 정수는 0 이상 1,000,000 이하이며, 0은 꾸러미 표시이고 양의 정수는 상품 가격이다.
기록은 지문의 규칙에 맞는 구매 대상 하나를 정확히 표현한다. 가장 바깥 대상에서 어떤 상품으로 내려가는 경로에도 꾸러미가 60개를 초과하여 나타나지 않는다.

출력

가장 바깥 구매 대상의 최종 결제 금액을 정수 하나로 출력한다. 가능한 입력에는 항상 하나의 계산 결과가 존재한다.

예제 입력 1

5
0 0 14 9 20

예제 출력 1

29

예제 입력 2

1
37

예제 출력 2

37

예제 입력 3

7
0 0 7 7 0 5 3

예제 출력 3

13
힌트 펼치기
  • 기록에서 양의 정수를 읽으면 그 상품의 계산이 끝난다.
  • 0을 읽으면 같은 계산 절차를 두 번 호출하여 두 구성품의 금액을 구할 수 있다.

관련 서재 장

관련 장

출처: 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 / 테스트측정하지 않음(브라우저 채점)