Daily LeetCode Challenge - 57. Insert Interval

Min Young Kim·2023년 1월 16일
0

algorithm

목록 보기
48/198

Problem From.
https://leetcode.com/problems/insert-interval/

오늘 문제는 주어진 intervals 배열에서 newInterval 배열을 넣는데, 겹치는 부분이 있으면 그 부분을 같이 포함하여 intervals 배열이 서로 겹치지않는 오름차순으로 정렬되도록 하는 문제였다.

문제에서 요구한 있는 그대로 풀 수 있었는데, 일단 비어있는 result 배열을 선언한뒤에,
newInterval 의 첫번째 원소보다 intervals 의 각 원소의 끝이 작다면 result 배열에 추가해준다.

그 다음 newInterval 과 겹치는 부분을 찾기 위해서, interval 의 시작점과 newInterval 의 시작점 중에서 작은 수를 새로운 interval 의 시작점으로 잡고, 마찬가지로 interval 의 끝점과 newInterval 의 끝점 중에서 큰 수를 새로운 interval 의 끝점으로 잡는다.

새로운 interval 을 result 배열에 넣어준 뒤에, 남아있는 intervals 를 result 배열에 넣어준다.

class Solution {
    fun insert(intervals: Array<IntArray>, newInterval: IntArray): Array<IntArray> {
        
        var insertInterval = newInterval
        var index = 0
        val result = arrayListOf<IntArray>()
        
        while(index < intervals.size && newInterval[0] > intervals[index][1]) {
            result.add(intervals[index])
            index += 1
        }
        while(index < intervals.size && newInterval[1] >= intervals[index][0]) {
            insertInterval = intArrayOf(
                Math.min(insertInterval[0], intervals[index][0]),
                Math.max(insertInterval[1], intervals[index][1])
            )
            index += 1
        }
        
        result.add(insertInterval)
        
        while(index < intervals.size) {
            result.add(intervals[index])
            index += 1
        }
        
        return result.toTypedArray()
    }
}

위 문제의 시간복잡도는 O(kN) 이 된다.

profile
길을 찾는 개발자

0개의 댓글