Daily LeetCode Challenge - 732. My Calendar III

Min Young Kim·2022년 10월 7일
0

algorithm

목록 보기
4/198

Problem From.
https://leetcode.com/problems/my-calendar-iii/

오늘 문제는 같은 시간대에 겹치는 이벤트의 최대 갯수를 반환하는 문제였다.
처음에는 시간대를 뭉쳐서 생각하여서 [5,10] 구간에서 [10,20], [10, 40], [5, 15] 와 겹쳐서 최대 이벤트 갯수가 4가 된다고 생각하였다.

하지만 문제에서 요구하는건 시간대별 겹치는 이벤트의 최대 개수로, [5,10] 이벤트가 [5,15] 이벤트랑만 겹치고 그와는 별개로, [5,15] 이벤트가 [10,20], [10, 40] 과 겹치는 수가 3이기 때문에 이벤트가 최대로 겹치는 수는 3이 된다.

그래서 이 문제는 TreeMap 을 사용하여,
이벤트 시작 시간을 Key, 이벤트 시작이기 때문에 +1 을 value
이벤트 끝나는 시간을 Key, 이벤트가 끝나기 때문에 -1 을 value 로
하여 값을 저장해둔 다음, TreeMap 을 순회하면서 각 숫자를 더하고 빼가면서 최대값이 되는 때를 찾아서 반환하도록 하였다.

class MyCalendarThree() {

    val map = TreeMap<Int, Int>()
    
    fun book(start: Int, end: Int): Int {
        
        map.put(start, map.getOrDefault(start, 0) + 1)
        map.put(end, map.getOrDefault(end, 0) - 1)
        
        var events = 0
        var answer = 0
        
        map.forEach { entry ->
            events += entry.value
            answer = Math.max(answer, events)
        }   
        return answer
    }
}

언뜻 어렵게 보이지만 시간대별로 나눠서 문제를 푼다면 쉽게 풀리는 문제였다.

profile
길을 찾는 개발자

0개의 댓글