문제 4448 · 킬로 IV
메신저 채널 현황 복원
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
사내 메신저 운영 담당자는 전송 재시도와 삭제 요청이 섞인 로그에서 현재 남아 있는 메시지 현황을 복원하려 한다. 로그를 수집하기 전에는 메시지가 하나도 없었다. 각 로그는 세로줄 문자 |로 필드를 구분하며, 입력된 순서가 처리 순서이다. 메시지 번호는 전체 채널에서 공통으로 사용하고, 채널 번호와 작성자 번호는 서로 별개의 번호이다. 전송 로그의 형식은 S|채널번호|작성자번호|메시지번호이다. 어떤 메시지 번호의 전송 로그를 처음 만나면 해당 채널에 해당 작성자의 메시지를 하나 저장한다. 같은 메시지 번호의 전송 로그를 다시 만나면 재시도로 간주하여 전체 로그 한 줄을 무시한다. 이때 채널이나 작성자 필드가 최초 전송과 달라도 최초 정보가 유지된다. 한 번 삭제된 메시지 번호가 다시 전송 로그에 나타나도 새 메시지를 만들지 않는다. 삭제 로그의 형식은 D|메시지번호이다. 해당 번호의 메시지가 현재 저장되어 있으면 삭제하고, 그렇지 않으면 아무 변화도 일으키지 않는다. 최초 전송보다 앞선 삭제 로그는 이후 전송에 영향을 주지 않는다. 따라서 전송을 아직 한 번도 만나지 않은 번호의 삭제와, 이미 삭제된 번호의 반복 삭제는 모두 무시한다. 모든 로그를 처리한 뒤 메시지가 남아 있는 채널별로 메시지 수와 작성자 수를 집계한다. 작성자 수는 그 채널에 메시지를 하나 이상 남긴 서로 다른 작성자 번호의 개수이다. 같은 작성자가 여러 채널에 메시지를 남겼다면 각 채널에서 별도로 센다. 메시지가 모두 삭제된 채널은 출력에서 제외한다. 운영 담당자가 확인할 최종 집계 결과를 구하는 프로그램을 작성한다.
입력
첫째 줄에 로그 수 N이 주어진다. N은 1 이상 20,000 이하의 정수이다. 다음 N개 줄에 전송 로그 S|C|U|M 또는 삭제 로그 D|M이 하나씩 주어진다. C와 U는 각각 1 이상 999 이하의 정수이고, M은 1 이상 20,000 이하의 정수이다. 숫자 앞에는 불필요한 0이 없고, 각 로그 안에는 공백이 없다. 같은 메시지 번호의 전송 로그가 여러 번 나타나거나, 한 번도 전송되지 않은 번호의 삭제 로그가 나타날 수 있다.
출력
첫째 줄에 메시지가 하나 이상 남아 있는 채널 수 K를 출력한다. 이후 K개 줄에 채널 번호, 남은 메시지 수, 남은 작성자 수를 공백으로 구분하여 출력한다. 채널 번호가 작은 순서로 출력한다. K가 0이면 첫째 줄의 0만 출력한다.
예제 입력 1
10 S|2|7|10 S|2|7|11 S|2|8|12 S|5|7|13 D|10 S|9|9|11 D|13 S|5|6|13 D|99 S|2|8|14
예제 출력 1
1 2 3 2
예제 입력 2
6 D|3 S|4|2|3 D|3 S|4|2|3 D|3 D|8
예제 출력 2
0
예제 입력 3
5 S|8|3|1 S|1|3|2 S|8|4|3 S|1|3|4 D|2
예제 출력 3
2 1 1 1 8 2 2
힌트 펼치기
- 전송을 한 번이라도 본 메시지 번호와 현재 남아 있는 메시지를 구분하여 관리한다.
- 채널과 작성자의 쌍마다 남은 메시지 수를 관리하면 작성자 수가 변하는 시점을 알 수 있다.
알고리즘 분류
로그 파싱해시집계풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |