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

문제 5285 · 킬로 I

영화관 매점 재고 정산

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

문제

영화관 매점에서는 M종류의 상품을 판매한다. 각 상품은 이름과 개당 가격이 정해져 있고, 영업 시작 시점의 재고는 모두 0개다. 하루 동안 N개의 기록이 시간 순서대로 주어지며 기록은 세 종류다. 'IN 이름 수량'은 해당 상품이 수량만큼 입고되어 재고가 그만큼 늘어난다는 뜻이다. 'SELL 주문번호 이름 수량'은 주문 하나가 들어왔다는 뜻이다. 현재 재고가 수량 이상이면 주문이 승인되어 재고가 수량만큼 줄어든다. 재고가 부족하면 주문 전체가 거절되며 재고는 변하지 않고 거절 횟수가 1 늘어난다. 거절된 주문은 부분 판매하지 않는다. 승인된 주문의 금액은 (개당 가격) × (수량)이다. 단, 수량이 10 이상이면 단체 할인이 적용되어 금액을 10퍼센트 깎고, 이때 금액은 (개당 가격 × 수량) × 9를 10으로 나눈 몫(소수점 이하 버림)이 된다. 'REFUND 주문번호'는 해당 주문의 환불 요청이다. 그 번호의 주문이 승인되었고 아직 환불되지 않았다면, 그 주문의 승인 금액(할인이 적용되었다면 할인된 금액)만큼 매출이 줄고 그 주문의 수량만큼 재고가 다시 늘어난다. 거절된 주문이거나 존재하지 않는 번호이거나 이미 환불된 주문이면 아무 일도 일어나지 않는다. SELL 기록의 주문번호는 서로 모두 다르다. 모든 기록을 처리한 뒤의 총 매출(승인된 주문의 금액 합에서 환불된 금액을 뺀 값), 거절된 주문의 수, 그리고 각 상품의 최종 재고를 구하라.

입력

첫 줄에 M과 N이 공백으로 구분되어 주어진다(1 ≤ M ≤ 1000, 1 ≤ N ≤ 200000). 이어서 M개의 줄에 상품 이름과 개당 가격이 공백으로 구분되어 주어진다. 이름은 영문 소문자와 숫자로 이루어진 길이 1 이상 10 이하의 문자열이며 서로 다르고, 가격은 1 이상 100000 이하의 정수다. 이어서 N개의 줄에 기록이 하나씩 주어진다. 기록의 이름은 항상 위의 M개 중 하나다. IN의 수량은 1 이상 1000000 이하, SELL의 수량은 1 이상 1000 이하의 정수이고, 주문번호는 1 이상 10^9 이하의 정수다.

출력

첫 줄에 총 매출, 둘째 줄에 거절된 주문의 수를 출력한다. 이어서 M개의 줄에 상품이 주어진 순서대로 '이름 최종재고'를 출력한다.

예제 입력 1

2 6
popcorn 5000
cola 2000
IN popcorn 20
SELL 1 popcorn 12
SELL 2 cola 3
IN cola 5
SELL 3 cola 3
REFUND 1

예제 출력 1

6000
1
popcorn 20
cola 2

예제 입력 2

1 7
gum 700
SELL 10 gum 1
IN gum 4
SELL 11 gum 4
REFUND 10
REFUND 11
REFUND 11
SELL 12 gum 2

예제 출력 2

1400
1
gum 2
힌트 펼치기
  • 상품 이름은 해시 맵으로 번호에 대응시키고, 주문은 주문번호를 키로 하는 해시 맵에 저장한다.
  • 환불할 때 필요한 값은 상품, 수량, 승인 금액, 환불 여부다. 할인된 금액을 그대로 저장해 두면 된다.
  • 할인 금액은 정수 나눗셈으로 계산한다. 수량이 정확히 10인 경우에 주의한다.

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