문제 3973 · 바이트 III
게임 서버의 첫 예약 충돌
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 게임 서버는 특별 대전을 진행할 때 공용 경기 공간 하나를 사용한다. 백엔드 담당자는 다음 운영 구간에 등록된 예약들을 배포하기 전에, 같은 공간을 동시에 사용하도록 잡힌 시간이 있는지 검사하려 한다. 모든 예약은 같은 경기 공간을 대상으로 하며, 예약마다 사용 시작 시각과 사용 종료 시각이 정수로 기록되어 있다. 시각은 운영 구간의 기준점으로부터 지난 분을 나타낸다. 시작 시각이 s이고 종료 시각이 e인 예약은 s 이상 e 미만인 동안 공간을 사용한다. 즉, 시작 시각에는 이미 사용 중이지만 종료 시각에는 사용을 끝낸 상태이다. 따라서 한 예약이 끝나는 시각에 다른 예약이 시작하면 두 예약은 충돌하지 않는다. 시작 시각은 항상 종료 시각보다 작다. 서로 다른 예약 두 개 이상이 같은 시각에 공간을 사용하면 예약 충돌이 발생한다. 한 예약이 다른 예약의 사용 구간 전체를 포함하는 경우도 충돌이다. 시작과 종료 시각이 모두 같은 예약이 여러 개 등록되어 있다면 각각 별개의 예약이므로 서로 충돌한다. 입력에 적힌 예약 순서는 접수 순서일 뿐이며, 시간순으로 정렬되어 있다는 보장은 없다. 검사 프로그램은 충돌하는 예약의 번호나 모든 충돌 구간을 나열하지 않는다. 대신 전체 예약 중 처음으로 충돌이 발생하는 시각 하나만 보고한다. 모든 시작 및 종료 시각이 정수이므로 충돌이 존재하면 그 최초 시각도 정수이며, 어떤 예약의 시작 시각과 같다. 같은 시각에 여러 예약이 함께 충돌해도 그 시각은 한 번만 출력한다. 예약을 취소하거나 시간을 옮기는 작업은 수행하지 않는다. 주어진 예약을 모두 그대로 사용한다고 가정하여 최초 충돌 시각을 구한다. 운영 구간 전체에 걸쳐 동시에 사용되는 예약이 두 개 이상인 순간이 없다면 충돌이 없음을 나타내는 -1을 출력한다.
입력
첫째 줄에 예약 수인 정수 N이 주어진다. 1 ≤ N ≤ 20,000이다. 다음 N개 줄에 각 예약의 시작 시각 s와 종료 시각 e가 공백으로 주어진다. s와 e는 정수이며 0 ≤ s < e ≤ 99,999이다. 같은 예약 구간이 여러 번 주어질 수 있다.
출력
예약 충돌이 처음 발생하는 시각을 정수 하나로 출력한다. 충돌이 없으면 -1을 출력한다.
예제 입력 1
5 20 28 4 9 8 13 13 20 2 4
예제 출력 1
8
예제 입력 2
4 12 17 0 5 5 12 17 21
예제 출력 2
-1
예제 입력 3
3 7 11 7 11 1 7
예제 출력 3
7
힌트 펼치기
- 예약을 시작 시각 순서로 정렬한다.
- 현재 예약보다 먼저 살펴본 예약들의 종료 시각 중 최댓값을 유지한다.
알고리즘 분류
정렬구간풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |