728x90
https://leetcode.com/problems/merge-intervals/
Merge Intervals - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
에러코드)
class Solution:
def merge(self, intervals):
res = []
intervals.sort(key= lambda x: x[0])
if len(intervals) == 1:
return intervals
for i in range(len(intervals)-1):
if intervals[i][1] < intervals[i+1][0] or intervals[i+1][0] > intervals[i][1]:
res.append(intervals[i])
else:
res.append([min(intervals[i][0],intervals[i+1][0])]+[max(intervals[i+1][1],intervals[i][1])])
return merge(res)
return merge(res)
여러 시도를 했지만 이런 에러코드를 짜게됐는데요
처음 접근은 sort를 생각했지만 인덱싱을 통해서 전체 항을 추가 하다보니까 맨 마지막 항이 포함이 안되고 코드가
복잡해졌습니다 ㅜㅠ
다른 풀이들을 통해서 어떤 식으로 접근을 해야하는지 살펴봤는데요
정답 풀이)
class Solution:
def merge(self, intervals: List[List[int]]) -> List[List[int]]:
intervals.sort(key=lambda x: x[0])
merged = []
for interval in intervals:
if not merged or merged[-1][1] < interval[0]:
merged.append(interval)
else:
merged[-1][1] = max(merged[-1][1], interval[1])
return merged
이 풀이는 Leetcode의 공식 풀이인데요
intervals를 sort 하고
첫번째 if 문에서는 merged 가 비어있거나, 새로 비교하는 값과 이 전의 끝값이 겹치지 않으면 단순 더하고
만약, 겹친다면 항연산을 하는게 아니라 이전의 끝값을 max값으로 교체해주는 방식을 사용했습니다.
제 풀이와 가장 큰 차이점은
else의 경우에 전체 리스트를 교체하는게 아니라, 끝값을 교체하는 형식이었는데요
문제를 접근할 때, 이런식으로 리스트 속의 리스트를 처리할 때
리스트를 인덱싱으로 접근하는 법을 주로 사용했는데, 이렇게 항을 별도로 처리하는 방법도 기억하고 넘어가야겠습니다
728x90
반응형
'‼ ERROR RECORD' 카테고리의 다른 글
Leetcode 75. Sort Colors (Dutch National flag, pointers) (0) | 2022.10.03 |
---|---|
Leetcode 721. Accounts Merge (Union Find) (1) | 2022.09.30 |
Leetcode 19. Remove Nth node from end of the list (Linked List, two-pointer) (0) | 2022.09.28 |
Leetcode 33. Search in Rotated Sorted Array(Binary Search) (0) | 2022.09.28 |
Leetcode 200. Number of Islands (Union Find) (0) | 2022.09.27 |
댓글