← 실전 문제

예약이 겹치는 시간

C++완성형

한 회의실에 예약이 여러 건 들어왔어요. reservations[i] = [start, end]는 start시부터 end시 직전까지 회의실을 사용하는 예약이에요. 시간은 정수 단위예요. 같은 시각에 끝나는 예약과 시작하는 예약은 겹치지 않아요.

int solution(vector<vector<int>> reservations)가 두 건 이상의 예약이 겹치는 시간의 총길이를 반환하도록 작성해 주세요. 세 건 이상이 동시에 겹쳐도 해당 시간은 한 번만 세어요. 예약이 없거나 겹치는 시간이 없으면 0을 반환해요.

매개변수와 반환값

  • 예약 수는 0 이상 100 이하예요. 각 행은 시작 시각과 종료 시각 두 값으로 구성돼요.
  • 시작 시각은 0 이상 23 이하, 종료 시각은 1 이상 24 이하의 정수이며 항상 start < end예요.
  • 같은 예약이 여러 번 들어올 수 있으며, 각각 별도의 예약으로 처리해요.
  • 반환값은 겹치는 시간의 총길이로, 0 이상 24 이하의 정수예요.

예시

  1. reservations = [[9, 12], [11, 14], [12, 13]]이면 2를 반환해요. 11시12시와 12시13시에 두 건이 겹쳐요.
  2. reservations = [[8, 10], [10, 12]]이면 0을 반환해요. 10시에 첫 예약이 끝나고 둘째 예약이 시작하므로 겹치지 않아요.

실행용 입출력

채점 하네스가 입력을 읽고 solution을 호출해요. 첫 줄에 예약 수를 입력하고, 이후 각 줄에 start end를 입력해요. 예약 수가 0이면 이후 줄은 없어요. 직접 작성할 부분은 solution 함수이며, 하네스가 반환값 하나를 출력해요.

예시 입력

3
9 12
11 14
12 13

예상 결과

2

예시 입력

2
8 10
10 12

예상 결과

0
핵심 개념
  • counting-aggregation: 각 시간 구간의 동시 예약 수를 세어요.
  • array-2d: 한 행의 시작과 종료 시각을 함께 읽어요.
  • loops: 예약 범위와 하루 전체 범위를 구분해요.
  • stl-vector: 주어진 벡터의 크기와 인덱스로 데이터를 읽어요.

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

로그인하고 풀기