작업이 대기열에 들어온 순서대로 처리돼요. commands의 각 행은 [종류, 값]이에요.
- 종류 0: 값이 적힌 작업 하나를 대기열 끝에 추가해요.
- 종류 1: 앞에서부터 최대 값 개의 작업을 처리해요. 작업이 부족하면 남아 있는 작업만 처리해요.
- 종류 2: 값 이상의 작업을 대기열 전체에서 취소해요. 취소되지 않은 작업의 상대적인 순서는 유지해요.
처리한 작업에 적힌 값의 합과 마지막 대기 작업 수를 [합, 개수]로 반환해요. 취소된 작업은 처리 합에 더하지 않아요. vector<int> solution(vector<vector<int>> commands)가 올바르게 동작하도록 두 빈칸을 채워 주세요.
매개변수와 반환값
명령 수는 0100, 각 행 길이는 2예요. 종류는 02, 값은 모든 종류에서 0~1,000이에요. 작업 값은 중복될 수 있어요. 처음 대기열은 비어 있어요. 빈 명령이면 [0,0]을 반환해요. 반환 배열 길이는 항상 2예요.
예시
[[0,3],[0,7],[0,2],[2,5],[1,1]]→[3,1]:[3,7,2]에서 7을 취소해[3,2]가 돼요. 앞의 3을 처리하고 2만 남아요.[[0,4],[1,5],[0,1]]→[4,1]: 5개를 요청했지만 작업은 하나여서 4만 처리해요. 나중에 추가한 1은 대기 중이에요.
자동 채점 입력·출력
첫 줄은 명령 수 N, 다음 N줄은 종류와 값이에요. 처리 합과 남은 작업 수를 공백으로 구분해 출력해요. main은 채점용이며 작성 대상은 두 빈칸이에요.
예시 입력
5 0 3 0 7 0 2 2 5 1 1
예상 결과
3 1
예시 입력
3 0 4 1 5 0 1
예상 결과
4 1
핵심 개념
stack-queue: 먼저 들어온 작업부터 처리하고 순서를 보존해요.function-design: 처리와 취소의 서로 다른 계약을 구분해요.loop-control: 요청 수와 실제 대기 수를 함께 확인해요.