문제 4132 · 바이트 III
항공권의 연속 좌석 배정
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 항공편의 좌석은 R개의 행으로 이루어져 있고, 각 행에는 왼쪽부터 번호가 붙은 C개의 좌석이 있다. 행 번호는 앞쪽부터 1번에서 R번까지이고, 각 행의 좌석 번호는 1번에서 C번까지이다. 항공권 발권기는 일행이 같은 행의 연속한 좌석에 앉도록 요청을 처리한다. 처음에는 모든 좌석이 비어 있으며, 발권기가 확인하는 현재 행은 1번 행이다. 각 요청에는 일행의 인원 K가 적혀 있다. 발권기는 먼저 현재 행에서 아직 배정하지 않은 좌석 수를 확인한다. 현재 행에 K명 이상이 앉을 수 있으면, 그 행의 남은 좌석 중 가장 왼쪽 좌석부터 K개를 배정한다. 이때 배정된 좌석은 다시 사용할 수 없으며 현재 행은 그대로 유지한다. 현재 행의 남은 좌석이 K개보다 적고 다음 행이 존재하면, 현재 행의 남은 좌석을 모두 사용하지 않기로 확정하고 바로 다음 행으로 이동한다. 그런 다음 새 행의 1번 좌석부터 K개를 배정한다. 모든 요청의 인원은 한 행의 좌석 수 이하이므로 새 행에서는 반드시 배정할 수 있다. 이전 행에서 포기한 좌석으로 돌아가거나 서로 다른 행에 일행을 나누어 앉히는 일은 없다. 현재 행의 남은 좌석이 부족하고 다음 행도 없으면 해당 요청은 실패한다. 실패한 요청은 좌석 배정 상태를 전혀 바꾸지 않는다. 따라서 마지막 행에 좌석이 조금 남아 있을 때 큰 일행의 요청이 실패하더라도, 뒤에 도착한 작은 일행은 그 좌석을 배정받을 수 있다. 한 행의 좌석을 모두 배정한 직후에도 현재 행은 유지하며, 다음 요청을 처리할 때 위 규칙에 따라 이동 여부를 판단한다. 요청을 입력 순서대로 처리하고 각 요청의 배정 결과를 구하라. 성공한 요청에는 배정한 행과 첫 좌석의 번호를 기록한다.
입력
첫째 줄에 행 수 R, 한 행의 좌석 수 C, 요청 수 N이 주어진다. 1 ≤ R ≤ 100,000, 1 ≤ C ≤ 99, 1 ≤ N ≤ 25,000이다. 다음 N개 줄에 각 요청의 인원 K가 하나씩 주어진다. 1 ≤ K ≤ C이다. 입력의 모든 수는 정수이다.
출력
각 요청에 대해 입력 순서대로 한 줄씩 출력한다. 배정에 성공하면 행 번호와 배정한 첫 좌석 번호를 공백으로 구분하여 출력한다. 배정할 수 없으면 0 0을 출력한다.
예제 입력 1
2 5 5 3 4 2 1 1
예제 출력 1
1 1 2 1 0 0 2 5 0 0
예제 입력 2
1 4 3 4 1 4
예제 출력 2
1 1 0 0 0 0
힌트 펼치기
- 현재 행 번호와 그 행에서 다음으로 배정할 좌석 번호를 관리한다.
- 마지막 행에서 실패한 요청은 남은 좌석을 없애지 않는다.
관련 서재 장
알고리즘 분류
구현시뮬레이션풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |