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

문제 4554 · 킬로 III

수정되는 창고 작업 로그

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

문제

물류 창고의 운영 서버는 작업 단말기에서 받은 수량 변동을 로그로 보관한다. 단말기는 같은 작업을 수정하여 다시 보낼 수 있고, 잘못 등록한 작업을 취소할 수도 있다. 따라서 로그에 등장한 수량을 모두 더하면 실제 작업 내역과 다른 결과가 나온다. 백엔드 담당자는 각 작업의 마지막 유효 상태를 복원한 뒤, 구역별 수량 변동을 집계하려 한다. 로그 한 줄은 세로줄 문자 |로 필드를 구분한다. SET|id|zone|delta는 식별자가 id인 작업을 등록하거나 수정하는 기록이다. 이 작업의 새 구역은 zone이고 새 수량 변동은 delta다. 양수는 해당 구역의 수량 증가를, 음수는 수량 감소를 뜻하며, 0도 허용한다. 같은 id의 유효한 작업이 이미 있다면 이전 구역과 이전 수량 변동을 모두 버리고 새 내용으로 완전히 교체한다. 수정 과정에서 구역이 바뀔 수도 있다. DEL|id는 해당 작업을 취소하는 기록이다. 유효한 작업이 있으면 제거하고, 없으면 아무 일도 일어나지 않는다. 한 번 취소된 id도 나중에 SET으로 다시 등록할 수 있다. 서로 다른 id는 구역과 수량 변동이 같아도 별개의 작업이다. 로그는 입력 순서대로 처리하며, 입력에 없는 시각이나 다른 순서를 추정하지 않는다. 모든 로그를 처리한 뒤, 남아 있는 유효한 작업의 delta를 구역별로 합한다. 이 합은 실제 재고량이 아니라 기록된 작업에 따른 순수한 변동량이므로 음수가 되어도 올바른 상태다. 최종 합이 양수인 구역 중 합이 가장 큰 구역과 그 합을 보고한다. 합이 같으면 구역 이름의 사전순이 가장 앞선 것을 선택한다. 합이 양수인 구역이 하나도 없다면 EMPTY를 보고한다. 중간 상태에 대한 보고는 필요하지 않다.

입력

첫째 줄에 로그 수 N이 주어진다. N은 1 이상 12,000 이하의 정수다. 다음 N개 줄에는 SET|id|zone|delta 또는 DEL|id 형식의 로그가 주어진다. id는 1 이상 12,000 이하의 정수다. zone은 대문자 Z와 정확히 세 자리 십진 숫자로 이루어지며 Z000부터 Z999까지 가능하다. delta는 -1,000,000 이상 1,000,000 이하의 정수다. 정수는 불필요한 앞자리 0 없이 표기하고, 0은 0으로 표기하며, 양수에는 +를 붙이지 않는다. 로그에는 공백이 없다. DEL의 id가 앞서 등장하지 않았어도 유효한 입력이다.

출력

조건을 만족하는 구역이 있으면 구역 이름과 최종 합을 공백 하나로 구분하여 한 줄에 출력한다. 최종 합이 양수인 구역이 하나도 없으면 EMPTY를 출력한다.

예제 입력 1

8
SET|1|Z002|10
SET|2|Z001|7
SET|1|Z001|4
SET|3|Z002|20
DEL|3
SET|4|Z003|11
DEL|9
SET|2|Z001|7

예제 출력 1

Z001 11

예제 입력 2

6
SET|7|Z010|12
DEL|7
SET|7|Z011|-3
SET|8|Z012|0
SET|9|Z011|3
DEL|10

예제 출력 2

EMPTY

예제 입력 3

5
SET|1|Z999|1000000
SET|2|Z999|1000000
SET|3|Z998|1000000
SET|4|Z998|1000000
DEL|5

예제 출력 3

Z998 2000000
힌트 펼치기
  • 식별자별 현재 작업을 저장하면 수정 전 내용을 찾아 집계에서 되돌릴 수 있다.
  • 구역별 합은 32비트 부호 있는 정수의 범위를 넘을 수 있다.

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