<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>