LeetCode 56. Merge Intervals

개발공부를해보자·2025년 2월 23일

LeetCode

목록 보기
59/95

파이썬 알고리즘 인터뷰 59번(리트코드 56) Merge Intervals
https://leetcode.com/problems/merge-intervals/

나의 풀이

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        result = []
        intervals.sort()
        intervals.reverse()
        while intervals:
            a, b = intervals.pop()
            while intervals and intervals[-1][0] <= b:
                c, d = intervals.pop()
                a, b = min(a, c), max(b, d)
            result.append([a, b])
        
        return result

다른 풀이

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
        result = []
        intervals.sort()
        for interval in intervals:
            if result and result[-1][1] >= interval[0]:
                result[-1][1] = max(result[-1][1], interval[1])
            else:
                result.append(interval) # result += interval,
        
        return result
  • 구간을 병합한 뒤에 result에 추가해야한다고 생각해서 다소 복잡하게 풀었는데,

  • 그럴 필요 없이 일단 result에 추가한 후, 병합이 필요하면 하는 방법으로 하면 코드가 간결해진다.

  • 그리고 책의 풀이에서는 result.append(interval) 대신 result += interval,로 되어 있어서 처음에는 오타인 줄 알았다.

  • 그런데 그게 아니라 콤마가 찍혀있는 연산이 있었다. 이에 대해 아래 글에 자세히 정리해두었다.

파이썬에서 a += b와 a += b, 의 차이

profile
개발 공부하는 30대 비전공자 직장인

0개의 댓글