박종훈 알고리즘 블로그

(Leetcode) 57 - Insert Interval

New Year Gift - Curated List of Top 75 LeetCode Questions to Save Your Time

위 링크에 있는 추천 문제들을 시간이 있을때마다 풀어보려고 한다.


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

57번 문제는 interval와 관련된 문제이다.

문제는 크게 어렵지 않게 해결되었다.


from typing import List

class Solution:
    def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
        startIndex = -1
        endIndex = len(intervals)

        if endIndex == 0:
            return [newInterval]
        elif intervals[0][0] > newInterval[1]:
            return [newInterval] + intervals
        elif intervals[len(intervals) - 1][1] < newInterval[0]:
            return intervals + [newInterval]

        for i, range in enumerate(intervals):
            if startIndex == -1 and range[1] >= newInterval[0]:
                startIndex = i
            if range[0] <= newInterval[1]:
                endIndex = i

        newNode: List[int] = [intervals[startIndex][0] if intervals[startIndex][0] < newInterval[0] else newInterval[0],
                              intervals[endIndex][1] if intervals[endIndex][1] > newInterval[1] else newInterval[1]]
        print(newNode)

        frontNode = intervals[0:startIndex]
        endNode = intervals[endIndex + 1: len(intervals)]
        print(frontNode, endNode)

        return intervals[0:startIndex] + [newNode] + intervals[endIndex + 1: len(intervals)]

파이썬 테스트 코드 작성

이번부터는 테스트 코드도 작성해봐야겠다 싶어서 찾아보니 python에서는 기본적으로 assert라는 간단한 검증 구문을 기능으로 제공하고 있었다.

아래와 같이 테스트 코드를 작성하였다.

example1 = Solution()
example_result1 = example1.insert([[1, 3], [6, 9]], [2, 5])
print(example_result1)
assert example_result1 == [[1, 5], [6, 9]]

example2 = Solution()
example_result2 = example2.insert(
    [[1, 2], [3, 5], [6, 7], [8, 10], [12, 16]], [4, 8])
print(example_result2)
assert example_result2 == [[1, 2], [3, 10], [12, 16]]

example3 = Solution()
example_result3 = example3.insert(
    [], [5, 7])
print(example_result3)
assert example_result3 == [[5, 7]]

example4 = Solution()
example_result4 = example4.insert(
    [[1, 5]], [6, 8])
print(example_result4)
assert example_result4 == [[1, 5], [6, 8]]

검증에 실패하면 아래와 같이 출력된다.

File "/algorithm/leetcode/57.insert_interval.py", line 20, in <module>
    assert example_result1 is [[1, 5], [6, 9]]
AssertionError

expected를 보여주는것은 좋지만 그와 함께 실제로는 어떤 결과가 나왔는지도 보여줬다면 더 좋지 않을까 싶긴하다.

궁금한 점

from typing import List

코딩테스트 같은걸 할 때 라이브러리를 추가하지 못하게 하는걸로 알고 있는데 typing에 있는 List는 써도 되는건가 싶긴하다. 나중에 잘 아는 사람이 있다면 물어봐야겠다.

categories: 스터디-알고리즘

tags: 파이썬 , 알고리즘 , python , algorithm , Leetcode , intervals , array , typing , list