Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 상가수익률계산기
- python Leetcode
- LeetCode
- 파이썬알고리즘
- 릿코드 풀기
- leetcode풀기
- python zip_longest
- leetcode풀이
- 파이썬 알고리즘
- python xor
- 잇츠디모
- 알고리즘풀이
- 파이썬 프로그래머스
- 파이썬알고리즘풀기
- 파이썬 릿코드
- 파이썬릿코드
- leetcode 풀기
- binary search
- 릿코드
- 릿코드풀이
- python priority queue
- 파이썬릿코드풀기
- python 릿코드
- 릿코드 파이썬
- 코틀린기초
- python 알고리즘
- 파이썬 알고리즘 풀기
- 알고리즘풀기
- python sorted
- 릿코드풀기
Archives
- Today
- Total
소프트웨어에 대한 모든 것
57. Insert Interval 본문
반응형
문제)
You are given an array of non-overlapping intervals intervals where intervals[i] = [starti, endi] represent the start and the end of the ith interval and intervals is sorted in ascending order by starti. You are also given an interval newInterval = [start, end] that represents the start and end of another interval.
Insert newInterval into intervals such that intervals is still sorted in ascending order by starti and intervals still does not have any overlapping intervals (merge overlapping intervals if necessary).
Return intervals after the insertion.
Example 1:
Input: intervals = [[1,3],[6,9]], newInterval = [2,5]
Output: [[1,5],[6,9]]
Example 2:
Input: intervals = [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval = [4,8]
Output: [[1,2],[3,10],[12,16]]
Explanation: Because the new interval [4,8] overlaps with [3,5],[6,7],[8,10].
Constraints:
- 0 <= intervals.length <= 104
- intervals[i].length == 2
- 0 <= starti <= endi <= 105
- intervals is sorted by starti in ascending order.
- newInterval.length == 2
- 0 <= start <= end <= 105
솔루션1)
- 두 개의 리스트를 생성
- newInterval에 머지되는 경우와 아닌 경우라 나눔
- newInterval에 머지되는 경우에 값들은 최종적으로 min, max를 구해서 새로운 인터벌을 생성
- 새로운 인터벌은 머지 안되는 아이템과 합쳐서 정렬한 결과를 리턴
class Solution:
def insert(self, intervals: List[List[int]], newInterval: List[int]) -> List[List[int]]:
merged = []
not_merged = []
for interval in intervals:
s, e = interval
if s <= newInterval[0] <= e or s <= newInterval[1] <= e:
# 머지 case
merged.append(interval)
elif newInterval[0] <= s and e <= newInterval[1]:
# 머지 case
merged.append(interval)
else:
# 머지 안되는 case
not_merged.append(interval)
# 머지 case에 newInterval을 포함
merged.append(newInterval)
# 머지 case에서 start 값과 end 값을 구성하는 새로운 interval을 생성
trans_merged = list(zip(*merged))
merged_interval = [min(trans_merged[0]), max(trans_merged[1])]
not_merged.append(merged_interval)
not_merged.sort()
return not_merged
반응형
'알고리즘 > LeetCode' 카테고리의 다른 글
100. Same Tree (0) | 2023.01.10 |
---|---|
2233. Maximum Product After K Increments (0) | 2023.01.03 |
520. Detect Capital (0) | 2023.01.02 |
1834. Single-Threaded CPU (0) | 2023.01.02 |
290. Word Pattern (0) | 2023.01.01 |
Comments