{}연습장
대시보드학습스킬 경로문제모의고사라이브 코테복습데이터
문제 목록〉큐〉스터디룸 총 점유 시간← 이전다음 →
#022 · 큐중간정렬 후 스윕,구간 합집합

스터디룸 총 점유 시간

문제

스터디룸 한 곳의 예약 기록이 bookings 배열로 주어집니다. bookings[i] = [start, end]는 i번째 예약이 start분에 시작해 end분에 끝난다는 뜻입니다 (시각은 기준 시점부터 흐른 분 단위, 구간은 [start, end)).

예약은 신청 순서대로 들어와 있어 시간순이 아니며, 여러 팀이 같은 시간대를 겹쳐 예약하기도 합니다. 관리자는 방이 실제로 사용된 총 시간 이 궁금합니다. 겹치는 시간은 몇 팀이 예약했든 한 번만 셉니다.

방이 점유된 총 시간(분)을 반환하는 solution(bookings) 함수를 작성하세요.

예시

bookings=[[540,600],[570,630],[700,720]] → 110
  앞의 두 예약이 겹쳐 540~630(90분) 한 덩어리가 되고, 700~720이 20분 더해진다.
 
bookings=[[300,360],[200,240],[100,130]] → 130
  겹치는 구간이 없다. 60 + 40 + 30 = 130.
 
bookings=[[100,200],[150,180]]           → 100
  두 번째 예약이 첫 번째 안에 완전히 들어간다.
 
bookings=[[10,20],[20,30]]               → 20
  앞 예약이 끝나는 시각에 뒤 예약이 시작하므로 빈 시간 없이 이어진다.

제약 조건

  • 1 ≤ bookings.length ≤ 100,000
  • 0 ≤ start < end ≤ 1,000,000
  • 같은 예약이 여러 번 들어와 있을 수 있습니다
  • 반환값은 정수입니다

시간 복잡도 목표: O(N log N)

테스트 케이스

예시 1: 두 예약이 겹치고 하나는 떨어져 있음
입력: bookings = [[540,600],[570,630],[700,720]]
출력: 110
예시 2: 시간순이 아니며 겹치지 않음
입력: bookings = [[300,360],[200,240],[100,130]]
출력: 130
예시 3: 한 예약이 다른 예약에 포함됨
입력: bookings = [[100,200],[150,180]]
출력: 100
예시 4: 끝 시각과 시작 시각이 맞닿음
입력: bookings = [[10,20],[20,30]]
출력: 20
엣지: 예약이 하나뿐
입력: bookings = [[5,6]]
출력: 1
엣지: 모두 첫 예약 안에 들어감
입력: bookings = [[0,10],[1,9],[2,8],[3,7]]
출력: 10
solution.ts
에디터 로딩 중…

▶ 실행은 기록 없이 채점만, 제출은 결과가 진행률·오답노트에 기록됩니다.