문제 4661 · 바이트 II
카페 주문의 마지막 상태
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
카페 주문 서버는 주문 정보가 저장될 때마다 한 줄의 로그를 남긴다. 운영 담당자는 이 로그를 이용하여 현재 유효한 주문을 메뉴별로 집계하려고 한다. 하나의 주문에 대해 로그가 여러 번 남을 수 있으므로 모든 줄의 수량을 단순히 더하면 올바른 결과를 얻을 수 없다. 각 로그는 주문 번호, 메뉴 코드, 수량, 상태의 네 필드로 이루어진다. 필드 사이는 세로줄 문자 | 하나로 구분하며, 필드 안에는 공백이나 세로줄이 들어 있지 않다. 상태는 OK 또는 CANCEL이다. OK는 해당 주문이 유효하다는 뜻이고, CANCEL은 취소되었다는 뜻이다. 입력에 나타나는 로그의 순서가 서버에 저장된 순서이며, 아래에 있는 줄일수록 나중에 저장된 로그다. 각 줄은 그 시점의 주문 정보 전체를 담는다. 같은 주문 번호가 다시 나타나면 이전 메뉴 코드, 수량, 상태를 모두 새 줄의 값으로 덮어쓴다. 메뉴와 수량도 바뀔 수 있다. 취소된 주문이 나중에 OK 상태로 다시 저장될 수도 있으며, 첫 로그부터 CANCEL 상태일 수도 있다. 이전 상태와의 관계를 추측하거나 수량의 차이를 계산해서는 안 된다. 모든 로그를 읽은 뒤 각 주문 번호에 대해 마지막 줄 하나만 남긴다. 그 마지막 상태가 OK인 주문만 집계한다. 메뉴별로 유효한 주문 번호의 개수와 그 주문들의 수량 합을 구한다. 같은 메뉴를 여러 개 주문했더라도 주문 번호 하나는 주문 개수에 한 번만 반영한다. 마지막 상태가 CANCEL인 주문은 어떤 메뉴의 집계에도 반영하지 않는다. 집계 결과는 메뉴 코드를 사전순으로 정렬하여 출력한다. 영문 소문자는 a부터 z 순서로 비교하고, 한 코드가 다른 코드의 앞부분과 같으면 짧은 코드가 먼저 온다. 유효한 주문이 전혀 없는 경우에는 별도로 정한 문자열을 출력한다.
입력
첫째 줄에 로그 수를 나타내는 정수 N이 주어진다. 1 ≤ N ≤ 10,000이다. 다음 N개 줄에 주문번호|메뉴코드|수량|상태 형식의 로그가 주어진다. 주문 번호는 1 이상 10,000 이하의 정수이고, 수량은 1 이상 100 이하의 정수이다. 두 정수는 앞에 불필요한 0 없이 표기한다. 메뉴 코드는 길이 1 이상 8 이하의 영문 소문자 문자열이다. 상태는 OK 또는 CANCEL이다. 주문 번호는 여러 줄에 반복될 수 있다.
출력
유효한 주문이 있으면 메뉴별로 한 줄씩 메뉴 코드, 주문 개수, 수량 합을 공백으로 구분하여 출력한다. 메뉴 코드는 사전순으로 출력하며 집계되지 않은 메뉴는 출력하지 않는다. 유효한 주문이 하나도 없으면 EMPTY를 출력한다.
예제 입력 1
6 1|latte|2|OK 2|tea|3|OK 1|mocha|1|OK 3|tea|4|OK 2|tea|3|CANCEL 4|mocha|2|OK
예제 출력 1
mocha 2 3 tea 1 4
예제 입력 2
3 7|tea|2|OK 7|tea|2|CANCEL 8|cake|1|CANCEL
예제 출력 2
EMPTY
예제 입력 3
4 9|tea|5|CANCEL 9|cake|2|OK 10|cake|3|OK 10|tea|1|OK
예제 출력 3
cake 1 2 tea 1 1
힌트 펼치기
- 주문 번호를 키로 삼아 가장 최근 로그의 정보를 저장한다.
- 입력을 모두 처리한 뒤 마지막 상태가 OK인 주문만 메뉴별로 합친다.
알고리즘 분류
로그 파싱해시정렬풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |