saurus2
Saurus2
saurus2
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발
      • AJAX
    • ML Ops
    • Profile
    • 음식점
    • 배낭여행
    • 컴퓨터공학
      • 알고리즘 공부
      • C++
      • Sever 스터디
      • Java spring
      • 알고리즘 _ 문제해결
      • 딥러닝
      • Java 정리
      • Python
      • LeetCode 1000
      • Machine Learning Study
      • Sign language Detection Pro..
      • LeetCode Solutions
    • 비콘
    • 데일리 리포트
    • 유학일기
      • 영어 공부
      • Daily
    • AI Master Degree
      • Data Mining
      • AI and Data engineering
      • Math Foundations for Decisi..
      • Natural Language Processing

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 딥러닝
  • Python
  • two pointer
  • c++
  • 취업준비
  • 개발자 취업준비
  • 백준
  • 파이썬
  • 알고리즘
  • DFS
  • 릿코드
  • 딕셔너리
  • 개발자
  • 알고리즘문제해결
  • BFS
  • LeetCode
  • 취준
  • 리트코드
  • 문제해결능력
  • 온라인저지

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
saurus2

Saurus2

컴퓨터공학/LeetCode 1000

[LeetCode] 253. Meeting Rooms II

2022. 11. 30. 07:56

253. Meeting Rooms II

Medium

Given an array of meeting time intervals intervals where intervals[i] = [starti, endi], return the minimum number of conference rooms required.

 

Example 1:

Input: intervals = [[0,30],[5,10],[15,20]]
Output: 2

Example 2:

Input: intervals = [[7,10],[2,4]]
Output: 1

 

Constraints:

  • 1 <= intervals.length <= 104
  • 0 <= starti < endi <= 106

문제 풀이

  • 미팅 시작 시간, 끝 시간의 배열이 주어진다. 
  • 미팅 시간을 가지고 최소 몇개의 미팅룸이 필요한지 구해야한다. 
  • 현재 미팅의 끝 시간과 다음 미팅의 시작시간이 같거나, 다음 미팅시작 시간이 크면 한개의 미팅룸을 중복해서 사용할 수 있다.

힙 O(NlogN)

  • 미팅 시작 시간으로 배열을 정렬한다. 
  • 새로만든 힙에 첫 미팅의 끝나는 시간을 넣는다. 
  • 정렬된 인터벌 배열에서 힙에 들어간 맨 앞자리 숫자(미팅중에 가장 끝시간이 빨리 끝나는것)과 다음 미팅 시작시간과 비교한다.
  • 만일 다음 미팅의 시작시간이 크거나 같으면 힙에서 값을 뺀다.
  • 힙에 다음 미팅의 끝나는 시간을 넣는다. 
  • [매번 힙에서 미팅의 끝나는 시간을 뺄때마다 가장 작은 값이 나오기 때문에 다음 미팅과 계속해서 비교가 가능하다.]
  • [미팅 시간이 들어있는 인터벌도 시작시간으로 정렬되어 있기 때문이다.]

연대순 정렬(Chronological Ordering) O(NlogN)

  • 이 풀이 방법은 미팅의 시작 시작과 종료 시간을 각각 정렬하는 것으로 시작한다. 
  • 시작 시간과 종료 시간을 각각 비교하면서 미팅룸의 개수를 더하고 뺀다.
  • 여기서, 만일 시작 시간이 종료 시간보다 크거나 같으면 종료 시간 포인터를 늘리고 미팅룸의 중복을 제거한다.
  • [이 경우에 다음 미팅 시간이 현재 미팅 다음에 같은 미팅룸에서 진행될 수 있음을 의미한다.]
  • 그리고 시작 시간 포인터를 하나 증가시키고 미팅룸의 개수를 증가시킨다.
  • [즉, 매번 미팅룸의 개수를 늘리면서 시작 시간과 종료 시간을 비교하는데, 다음 미팅의 시작 시간이 이전 미팅 종료 시간보다 크거나 같으면 방을 같이 쓸 수 있기 때문에 개수를 줄이고 종료 시간 포인터를 늘려준 것으로 이해하면 된다.]

소스 코드

힙

class Solution:
    def minMeetingRooms(self, intervals: List[List[int]]) -> int:
        if not intervals:
            return 0
        free = []
        intervals.sort(key=lambda x:x[0])
        heapq.heappush(free, intervals[0][1])
        for p1, p2 in intervals[1:]:
            if free[0] <= p1:
                heapq.heappop(free)
            heapq.heappush(free, p2)
        return len(free)

연대순 정렬(Chronological Ordering)

class Solution:
    def minMeetingRooms(self, intervals: List[List[int]]) -> int:
        if not intervals:
            return 0
        free = 0
        s, e = 0, 0
        s_lst = sorted([i[0] for i in intervals])
        e_lst = sorted([i[1] for i in intervals])
        while s < len(intervals):
            if s_lst[s] >= e_lst[e]:
                e += 1
                free -= 1
            s += 1
            free += 1
            
        return free
저작자표시 (새창열림)

'컴퓨터공학 > LeetCode 1000' 카테고리의 다른 글

[LeetCode] 1207. Unique Number of Occurrences  (0) 2022.12.01
[LeetCode] 380. Insert Delete GetRandom O(1)  (0) 2022.11.30
[LeetCode] 246. Strobogrammatic Number  (1) 2022.11.29
[LeetCode] 2225. Find Players With Zero or One Losses  (0) 2022.11.29
[LeetCode] 627. Swap Salary  (0) 2022.11.23
    '컴퓨터공학/LeetCode 1000' 카테고리의 다른 글
    • [LeetCode] 1207. Unique Number of Occurrences
    • [LeetCode] 380. Insert Delete GetRandom O(1)
    • [LeetCode] 246. Strobogrammatic Number
    • [LeetCode] 2225. Find Players With Zero or One Losses
    saurus2
    saurus2
    Simple is Best

    티스토리툴바