← 실전 문제

지연 처리 후 남은 작업

C++빈칸 채우기

작업이 대기열에 들어온 순서대로 처리돼요. commands의 각 행은 [종류, 값]이에요.

  • 종류 0: 값이 적힌 작업 하나를 대기열 끝에 추가해요.
  • 종류 1: 앞에서부터 최대 값 개의 작업을 처리해요. 작업이 부족하면 남아 있는 작업만 처리해요.
  • 종류 2: 값 이상의 작업을 대기열 전체에서 취소해요. 취소되지 않은 작업의 상대적인 순서는 유지해요.

처리한 작업에 적힌 값의 합과 마지막 대기 작업 수를 [합, 개수]로 반환해요. 취소된 작업은 처리 합에 더하지 않아요. vector<int> solution(vector<vector<int>> commands)가 올바르게 동작하도록 두 빈칸을 채워 주세요.

매개변수와 반환값

명령 수는 0100, 각 행 길이는 2예요. 종류는 02, 값은 모든 종류에서 0~1,000이에요. 작업 값은 중복될 수 있어요. 처음 대기열은 비어 있어요. 빈 명령이면 [0,0]을 반환해요. 반환 배열 길이는 항상 2예요.

예시

  1. [[0,3],[0,7],[0,2],[2,5],[1,1]] → [3,1]: [3,7,2]에서 7을 취소해 [3,2]가 돼요. 앞의 3을 처리하고 2만 남아요.
  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: 요청 수와 실제 대기 수를 함께 확인해요.

코드 작성과 채점은 로그인 후 이용해요

로그인하고 풀기