알고리즘

[LeetCode] 56 Merge Intervals JavaScript

2022. 7. 17. 11:50

문제 링크

 

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

 

문제 유형

배열, 정렬

 

문제 풀이

이 문제는 어떤 숫자 배열의 간격들이 요소인 배열이 주어진다. 간격이 겹치는 배열을 합쳐서 최종적으로 겹치지 않는 배열들을 출력한다.

이 문제는 다음과 같은 방식으로 접근한다.

  1. 배열을 정렬한다.
    예제 입력은 요소들이 정렬되어 있어 모든 테스트 케이스들이 정렬된 줄 알았는데 테스트 케이스에는 정렬되지 않은 배열도 포함되어 있었다. 따라서, 왼쪽 간격을 기준으로 정렬하되 왼쪽 간격이 같은 경우에는 오른쪽 간격을 기준으로 정렬한다.
  2. 겹치는 간격을 찾아 합친다.
     intervals = [[1, 3], [2, 6], [3, 5], [8, 10], [12, 15]]  와 같은 입력이 있다. 합쳐진 배열과 현재 탐색하는 배열의 간격을 비교하여 간격이 겹치는지를 확인한다.
    배열은 정렬되었으므로 현재 합쳐진 배열의 끝 간격보다 현재 배열의 처음 간격이 크면 간격은 겹치지 않는다.
    i = 1 일 때, 현재 탐색할 배열은 [2, 6]이고 합쳐진 배열은 [1, 3]이다. 현재 배열의 처음 간격이 합쳐진 배열의 끝 간격보다 작거나 같으면 겹치므로 두 배열을 합친다.

    i = 2 일 때, 현재 탐색할 배열은 [3, 5]이고 합쳐진 배열은 [1, 6]이다. 두 배열은 겹치지만 현재 배열의 처음과 끝이 합쳐진 배열 내에 포함되므로 합쳐진 배열은 변하지 않는다.

 

코드

var merge = function(intervals) {
    if (intervals.length === 1) return intervals;
    
    intervals.sort((a, b) => a[0] != b[0] ? a[0] - b[0] : a[1] - b[1]); //정렬
    const arr = [intervals[0]];
    
    for (let i = 1; i < intervals.length; i++) {
        const [prevLeft, prevRight] = arr[arr.length - 1];
        const [nowLeft, nowRight] = intervals[i];
        
        if (nowLeft <= prevRight && nowRight > prevRight) { // 끝 간격이 더 크면서 합쳐진 배열과 겹칠 때
            arr[arr.length - 1][1] = nowRight;
        } else if (nowLeft > prevRight) { // 합쳐진 배열과 겹치지 않을 때
            arr.push(intervals[i]);
        }
    }
    return arr;
};

 

참고

https://www.youtube.com/watch?v=S9eQ6DIBPqg

'알고리즘' 카테고리의 다른 글

[LeetCode] 287 Find the Duplicate Number JavaScript  (0) 2022.07.18
[LeetCode] 581 Shortest Unsorted Continuous Subarray JavaScript  (0) 2022.07.18
[LeetCode] 88 Merge Sorted Array JavaScript  (0) 2022.07.17
[LeetCode] 162 Find Peak Element JavaScript  (0) 2022.07.15
[LeetCode] 75 Sort Colors JavaScript  (0) 2022.07.13
'알고리즘' 카테고리의 다른 글
  • [LeetCode] 287 Find the Duplicate Number JavaScript
  • [LeetCode] 581 Shortest Unsorted Continuous Subarray JavaScript
  • [LeetCode] 88 Merge Sorted Array JavaScript
  • [LeetCode] 162 Find Peak Element JavaScript
sandwe
sandwe
sandwe
sandwe
sandwe
전체
오늘
어제
  • 분류 전체보기 (69)
    • CSS (1)
    • 알고리즘 (35)
    • JavaScript (30)
      • 모던 자바스크립트 Deep Dive (30)
    • React (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 스택
  • 스프레드 문법
  • 해시 테이블
  • 표준 빌트인 객체
  • 렌더링 과정
  • float
  • BFS
  • Leetcode
  • 클로저
  • Suspense
  • Subsets
  • 프로그래머스
  • React Query
  • 알고리즘
  • 선언적
  • javascript
  • dfs
  • 백준
  • 백트래킹
  • 구조 분해 할당
  • 이터러블
  • map
  • 투 포인터
  • Error Boundary
  • string
  • 다이나믹 프로그래밍
  • 해쉬 맵
  • 이진 탐색
  • 프로토타입
  • 정렬

최근 댓글

최근 글

hELLO · Designed By 정상우.
sandwe
[LeetCode] 56 Merge Intervals JavaScript
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.