문제 4199 · 바이트 IV
항공권 판매 창구 재현
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 항공편의 판매 창구는 좌석 판매 상황에 따라 항공권 가격을 조정한다. 좌석에는 1부터 M까지의 번호가 붙어 있고, 처음에는 모든 좌석이 비어 있다. 창구의 처리 기록에는 특정 좌석을 구매하려는 요청과 특정 좌석을 취소하려는 요청이 입력 순서대로 남아 있다. 이 기록을 그대로 재현하여 마지막에 판매 중인 항공권 수와 창구에 남은 금액을 구하려 한다. 기본 가격은 B원이고, 가격 증가 단위는 D원이다. 구매 요청을 처리하기 직전에 판매 중인 항공권이 C장이라면, 이번 항공권의 가격은 B+D×⌊C/K⌋원이다. 여기서 K는 양의 정수이고, ⌊C/K⌋는 C를 K로 나눈 몫이다. 구매하려는 좌석이 비어 있으면 이 가격을 받고 항공권을 판매한다. 해당 좌석에 받은 가격을 기록하고 판매 중인 항공권 수를 1 늘린다. 이미 판매된 좌석에 대한 구매 요청은 무시하며 금액도 받지 않는다. 취소 요청의 좌석이 판매된 상태이면 그 항공권을 취소한다. 그 좌석을 판매할 때 실제로 받았던 가격을 P원이라고 할 때, 환불 금액은 max(0,P-F)원이다. F는 모든 취소에 동일하게 적용하는 수수료이다. 환불한 금액만큼 창구의 금액을 줄이고 해당 좌석을 비운 뒤, 판매 중인 항공권 수를 1 줄인다. 이미 비어 있는 좌석의 취소 요청은 무시한다. 취소된 좌석은 나중에 다시 구매할 수 있다. 다시 판매할 때의 가격은 그 시점의 판매 중인 항공권 수로 새롭게 계산한다. 이전 판매 가격을 재사용하지 않으며, 취소할 때 현재 판매 가격을 기준으로 환불하지도 않는다. 수수료가 구매 가격 이상이면 환불 금액은 0원이지만 취소 자체는 정상적으로 처리한다. 처음 창구의 금액은 0원이다. 처리 기록에 없는 판매나 취소는 발생하지 않는다. 모든 요청을 순서대로 처리한 뒤, 판매 중인 항공권 수와 지금까지 받은 금액에서 환불 금액을 뺀 값을 출력한다.
입력
첫째 줄에 정수 M, B, D, K, F, N이 공백으로 구분되어 주어진다. 1≤M≤1,000, 1≤B≤10,000, 0≤D≤10,000, 1≤K≤M, 0≤F≤10,000, 1≤N≤60,000이다. 다음 N개의 줄에는 0이 아닌 정수 X가 하나씩 주어진다. 1≤|X|≤M이다. X가 양수이면 X번 좌석의 구매 요청이고, 음수이면 -X번 좌석의 취소 요청이다.
출력
마지막에 판매 중인 항공권 수와 창구에 남은 금액을 이 순서대로 한 줄에 공백으로 구분하여 출력한다. 성공한 구매가 없으면 두 값 모두 0이다. 모든 항공권이 취소되어도 수수료 때문에 남은 금액은 0보다 클 수 있다.
예제 입력 1
3 100 20 1 10 7 1 2 2 -1 3 -2 1
예제 출력 1
2 260
예제 입력 2
1 50 0 1 100 4 -1 1 -1 -1
예제 출력 2
0 50
예제 입력 3
2 80 10 2 5 3 -2 -1 -2
예제 출력 3
0 0
힌트 펼치기
- 좌석마다 현재 판매 여부와 실제 판매 가격을 저장한다.
- 취소 요청에서는 그 좌석에 저장된 가격을 사용한다.
관련 서재 장
알고리즘 분류
구현시뮬레이션배열풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |