<aside> 👉🏿 문제 링크

</aside>

문제 정리

<aside> 👉🏿 intervals가 주어진다. 겹치는 구간이 있으면 합쳐서 반환하라.

</aside>

<aside> 👉🏿 설명 : [1,3] 그리고 [2,6]이 겹치기 때문에 [1,6]으로 병합.

</aside>

Input: intervals = [[1,3],[2,6],[8,10],[15,18]]
Output: [[1,6],[8,10],[15,18]]

접근 방법

<aside> 👉🏿 intervals를 돌면서 spread를 해줘서 겹치는 부분을 반환하려 했었다.

위의 예시의 경우 아래와 같이

spraed_list = [[1, 2, 3], [2, 3, 4, 5, 6], [8, 9, 10], [15, 16, 17 ,18]]

일단 무조건 병합시켜봤는데, 다시 intervals 형식으로 반환하는게 너무 어려웠다.

</aside>

코드 진행

<aside> 👉🏿 풀이를 참조했다.

먼저 인자로 받은 intervals를 정렬하고 intervals를 반복하자.

여기서 새로운 문법을 배웠다.

람다를 이용하면 첫번째 값을 키로 정렬할 수 있다고 한다.

</aside>

def merge(self, intervals):
    merged = []
    for i in sorted(intervals, key=lambda x: x[0]):

<aside> 👉🏿 다음으로 merged라는 리스트에 intervals를 반복하며 하나의 구간씩 넣는다.

현재 참조중인 interval[0]이 merged의 마지막값의[1] 즉 두번째 값보다 작거나 같으면

megerd[-1][1]을 최대값으로 지정해준다.

</aside>

if merged and i[0] <= merged[-1][1]:
                merged[-1][1] = max(merged[-1][1], i[1])
            else:
                merged += i,

<aside> 👉🏿 이부분이 조금 어려워서 예시로 알아보았다.

intervals=[[1, 3], [2, 6], [8, 10], [15, 18]]

위의 예시인 경우 merged에 [[1,3]]이 들어있다고 생각해보자.

그럼 현재 [2,6]을 참조중이니 i[0]은 2일것이다.

merged[-1][1]은 3일 것이니 i[0] <= merged[-1][1] 가 성립한다.

따라서 merged[-1][1] 의 값을 max(merged[-1][1], i[1]) 즉, 2, 6중에서 큰수로 바꾼다.

</aside>

<aside> 👉🏿 추가적으로 여기서 특이한 문법이 등장한다.

merged += i, 와같은 문법인데 ,를 붙혀주면 중첩 리스트로 만들어 준다.

위와같은 문법을 사용하지 않을 경우 중첩리스트가 되지 않아 int에 슬라이싱을 하여 오류가 발생한다.

</aside>