문제 4554 · 킬로 III
수정되는 창고 작업 로그
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.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비트 부호 있는 정수의 범위를 넘을 수 있다.
알고리즘 분류
로그 파싱해시집계풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |