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

문제 4664 · 킬로 IV

생산 라인의 출고 정산 로그

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

문제

한 공장의 백엔드 서버는 생산 라인에서 올라오는 입고, 주문, 취소 이벤트를 기록된 순서대로 처리한다. 제품은 정수 제품 번호로 구분하며, 처음에는 모든 제품의 재고가 0개다. 서버가 관리하는 순매출도 처음에는 0이다. 이벤트를 처리하는 도중에는 뒤에 나오는 정보를 미리 반영하지 않는다. ADD s q는 제품 s가 q개 완성되어 창고에 입고되었다는 뜻이다. 해당 제품의 재고를 q개 늘린다. BUY s q p는 제품 s를 개당 가격 p에 q개 출고해 달라는 주문이다. 처리 직전 재고가 q개 이상이면 주문을 승인하고 재고를 q개 줄이며 순매출에 q와 p의 곱을 더한다. 재고가 부족하면 주문 전체를 거절한다. 일부 수량만 출고하는 일은 없으며, 거절된 주문은 재고와 순매출을 바꾸지 않는다. 각 이벤트에는 입력에 등장하는 순서대로 1번부터 N번까지 번호를 붙인다. CANCEL t는 t번 이벤트의 주문을 취소해 달라는 요청이다. t번 이벤트는 반드시 앞서 등장한 BUY 이벤트다. 해당 주문이 승인되었고 아직 성공적으로 취소된 적이 없다면 취소가 성공한다. 성공하면 그 주문에서 출고한 제품과 수량을 그대로 재고에 돌려놓고, 그 주문에서 더했던 금액을 순매출에서 뺀다. 거절된 주문이거나 이미 취소된 주문이면 요청을 무시한다. 취소된 주문을 다시 승인하거나, 거절된 주문을 나중에 재고가 생겼다는 이유로 승인하지 않는다. 같은 주문에 대한 취소 요청은 여러 번 들어올 수 있지만 실제 재고 반환과 환불은 최대 한 번만 일어난다. 승인된 주문 수는 나중에 취소되더라도 줄이지 않으며, 거절된 주문 수에는 BUY 처리 당시 거절된 주문만 센다. 모든 이벤트를 처리한 뒤 승인된 주문 수, 거절된 주문 수, 성공한 취소 수, 최종 순매출, 모든 제품의 최종 재고 합을 구한다.

입력

첫째 줄에 이벤트 수 N이 주어진다. N은 1 이상 20,000 이하의 정수다.
다음 N개 줄에 이벤트가 하나씩 주어진다. 각 줄은 ADD s q, BUY s q p, CANCEL t 중 하나다.
s, q, p는 모두 정수이며 1 ≤ s ≤ 100, 1 ≤ q ≤ 100, 1 ≤ p ≤ 1,000,000,000이다.
i번 이벤트가 CANCEL t라면 1 ≤ t < i이며, t번 이벤트는 BUY임이 보장된다. CANCEL이 첫 이벤트로 주어지는 일은 없다.

출력

승인된 주문 수, 거절된 주문 수, 성공한 취소 수, 최종 순매출, 모든 제품의 최종 재고 합을 한 줄에 공백으로 구분하여 정수로 출력한다. 해당 주문이나 취소가 없으면 그 개수는 0이다.

예제 입력 1

9
ADD 4 8
BUY 4 5 20
BUY 4 4 30
CANCEL 2
BUY 4 4 30
CANCEL 2
CANCEL 3
ADD 7 2
CANCEL 5

예제 출력 1

2 1 2 0 10

예제 입력 2

5
ADD 1 100
BUY 1 100 1000000000
BUY 1 1 1
ADD 2 3
BUY 2 2 7

예제 출력 2

2 1 0 100000000014 1

예제 입력 3

1
BUY 9 1 8

예제 출력 3

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