파이썬 알고리즘 인터뷰 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,로 되어 있어서 처음에는 오타인 줄 알았다.
그런데 그게 아니라 콤마가 찍혀있는 연산이 있었다. 이에 대해 아래 글에 자세히 정리해두었다.