saurus2
Saurus2
saurus2
전체 방문자
오늘
어제
  • 분류 전체보기
    • 개발
      • AJAX
    • ML Ops
    • Profile
    • 음식점
    • 배낭여행
    • 컴퓨터공학
      • 알고리즘 공부
      • C++
      • Sever 스터디
      • Java spring
      • 알고리즘 _ 문제해결
      • 딥러닝
      • Java 정리
      • Python
      • LeetCode 1000
      • Machine Learning Study
      • Sign language Detection Pro..
      • LeetCode Solutions
    • 비콘
    • 데일리 리포트
    • 유학일기
      • 영어 공부
      • Daily
    • AI Master Degree
      • Data Mining
      • AI and Data engineering
      • Math Foundations for Decisi..
      • Natural Language Processing

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • 알고리즘문제해결
  • c++
  • Python
  • 개발자
  • 알고리즘
  • 딥러닝
  • 백준
  • 취업준비
  • two pointer
  • 문제해결능력
  • 개발자 취업준비
  • BFS
  • 리트코드
  • 릿코드
  • DFS
  • 딕셔너리
  • 파이썬
  • 취준
  • LeetCode
  • 온라인저지

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
saurus2

Saurus2

컴퓨터공학/LeetCode 1000

[LeedCode] 56. Merge Intervals 파이썬 Medium

2021. 10. 31. 04:08

문제 해석:

배열에 각 시작점, 종료점을 가진 값들이 저장되어 있다. 
겹쳐져 있는 구간들을 합치고, 겹치지 않는 모든 간격들은 배열에 넣어 반환한다.

문제 해설:

1. 주어지는 점들은 길이가 모두 다르기 때문에, 간격마다 모두 확인을 해야한다.
처음나온 간격이 다음 간격보다 클수도, 작을수도, 혹은 모두 포함될 수 도 있다.
2. 간격들을 오름차순으로 정렬하여, 하나씩 저장해나가야한다.
3. 새로만든 리스트가 비어있으면 바로 넣는다.
4. 리스트 가장 뒤의 간격의 끝 숫자가 새로 확인되는 간격 첫 숫자보다 작을 경우 리스트에 넣는다.
5. 3번과 4번이 아니라면 간격이 겹친다. 리스트는 이미 정렬되어있기 때문에
마지막의 간격 끝점과 새로 확인될 간격의 시작점을 비교하여 큰 값을 끝점으로 갱신한다.

 

Given an array of intervals where intervals[i] = [starti, endi], merge all overlapping intervals, and return an array of the non-overlapping intervals that cover all the intervals in the input.

 

Example 1:

Input: intervals = [[1,3],[2,6],[8,10],[15,18]] Output: [[1,6],[8,10],[15,18]] Explanation: Since intervals [1,3] and [2,6] overlaps, merge them into [1,6].

Example 2:

Input: intervals = [[1,4],[4,5]] Output: [[1,5]] Explanation: Intervals [1,4] and [4,5] are considered overlapping.

 

Constraints:

  • 1 <= intervals.length <= 104
  • intervals[i].length == 2
  • 0 <= starti <= endi <= 104

소스코드:

class Solution:
    def merge(self, intervals: List[List[int]]) -> List[List[int]]:
    	# 오름차순 정렬해서 간격을 확인하기 편하게 만든다.
        intervals.sort(key = lambda x: x[0])
        merged = []
        for start, end in intervals:
        	# 리스트에 값이 없으면 넣기.
            if not merged:
                merged.append([start, end])
            # 리스트 마지막 끝값과 들어올 값의 시작점 비교해서 겹치지 않는 간격이면 리스트에 추가
            elif merged[-1][1] < start:
                merged.append([start, end])
            # 겹치는 간격이면, 끝점끼리 비교해서 값 갱신
            else:
                merged[-1][1] = max(merged[-1][1], end)
        return merged

'컴퓨터공학 > LeetCode 1000' 카테고리의 다른 글

[LeedCode] 2. Add Two Numbers 파이썬 Medium  (0) 2021.11.02
[LeetCode] 200. Number of Islands 파이썬 Medium  (0) 2021.10.31
[LeetCode] 1710. Maximum Units on a Truck 파이썬 easy 정렬  (0) 2021.10.30
[LeetCode] 937. Reorder Data in Log Files - Easy 파이썬 sorted key 함수  (0) 2021.10.30
[LeetCode/릿코드] - 10. Regular Expression Matching - (Hard/하드)  (0) 2021.07.31
    '컴퓨터공학/LeetCode 1000' 카테고리의 다른 글
    • [LeedCode] 2. Add Two Numbers 파이썬 Medium
    • [LeetCode] 200. Number of Islands 파이썬 Medium
    • [LeetCode] 1710. Maximum Units on a Truck 파이썬 easy 정렬
    • [LeetCode] 937. Reorder Data in Log Files - Easy 파이썬 sorted key 함수
    saurus2
    saurus2
    Simple is Best

    티스토리툴바