문제 4304 · 바이트 II
택배 보관대의 현재 목록
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 공동 주택의 택배 보관대는 운송장 번호를 이용하여 현재 보관 중인 택배를 관리한다. 관리 단말에는 택배를 맡기는 기록과 찾아가는 기록이 도착한 순서대로 저장된다. 단말의 통신 상태가 고르지 않아 같은 기록이 여러 번 전송될 수 있으므로, 기록 한 줄을 무조건 택배 한 개의 증감으로 처리해서는 안 된다. 각 기록은 문자 하나와 운송장 번호 하나로 이루어진다. 문자 A는 해당 번호의 택배를 보관대에 맡겼다는 뜻이다. 그 번호가 현재 보관 목록에 없다면 목록에 추가한다. 이미 보관 중이라면 중복 전송으로 보고 아무것도 바꾸지 않는다. 문자 B는 해당 번호의 택배를 찾아갔다는 뜻이다. 그 번호가 목록에 있다면 목록에서 제거하고, 목록에 없다면 아무것도 바꾸지 않는다. 모든 기록을 처리하기 전에는 보관 목록이 비어 있다. 운송장 번호는 택배 종류나 보관 위치를 나타내지 않는 식별용 정수다. 서로 다른 번호의 택배는 각각 한 개로 센다. 한 번 찾아간 번호가 나중에 A 기록으로 다시 나타날 수도 있으며, 이때는 새로 맡긴 택배처럼 다시 보관 목록에 추가한다. 기록의 시각은 따로 주어지지 않으며, 입력에 나타난 순서만을 따라 처리한다. 번호의 크기나 기록의 종류에 따라 처리 순서를 바꾸지 않는다. 관리자는 마지막 기록까지 처리한 뒤 남아 있는 택배 수와, 운영 도중 동시에 보관했던 택배 수의 최댓값을 알고자 한다. 최댓값을 구할 때는 기록 처리 전의 빈 상태와 각 기록을 처리한 직후의 상태를 모두 고려한다. 같은 최댓값에 여러 번 도달하더라도 그 값 하나만 필요하다. 실제로 목록을 바꾸지 않은 기록 역시 처리된 기록이며, 그 직후의 보관 수는 직전과 같다. 남은 택배가 없으면 첫 번째 값은 0이고, 한 번도 택배를 보관하지 않았다면 두 번째 값도 0이다. 두 값을 이 순서대로 구한다.
입력
첫째 줄에 기록 수 N이 주어진다. 1 ≤ N ≤ 40,000이다. 다음 N개 줄에 문자 C와 운송장 번호 X가 공백으로 구분되어 주어진다. C는 A 또는 B이고, X는 1 이상 999,999 이하의 정수다. 모든 기록은 처리할 순서대로 주어진다.
출력
마지막 보관 수와 보관 수의 최댓값을 공백으로 구분하여 한 줄에 출력한다.
예제 입력 1
8 A 31 A 31 B 7 A 7 B 31 A 92 B 7 A 31
예제 출력 1
2 2
예제 입력 2
4 B 5 B 5 B 12 B 1
예제 출력 2
0 0
예제 입력 3
5 A 8 B 8 A 8 A 9 B 8
예제 출력 3
1 2
힌트 펼치기
- 현재 보관 중인 운송장 번호를 집합에 저장한다.
- 각 기록을 반영한 뒤 집합의 크기로 최댓값을 갱신한다.
관련 서재 장
알고리즘 분류
해시집합구현풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |