56. Merge Intervals

2025. 10. 20. 22:48·Coding Test/LeetCode

난이도: 중간 (Medium)

링크: LeetCode 56

풀이 날짜: 2025/10/21

 

1. 문제 이해

여러 구간(interval)이 주어졌을 때, 겹치는 구간을 병합하고, 겹치지 않는 구간은 그대로 유지한다.

 

2. 접근 방식 — 정렬 + 병합

핵심 아이디어: 시작값 기준으로 정렬 후, 연속되는 구간을 병합한다.

  1. intervals를 시작값 기준으로 오름차순 정렬
  2. current 변수에 현재 병합 중인 구간 저장
  3. 반복문으로 각 구간과 current 비교:
    • 겹치는 경우(current[1] >= intervals[i][0]): current[1] = max(current[1], end) → 끝값 갱신
    • 겹치지 않는 경우(current[1] < intervals[i][0]): current를 결과 배열에 push, current 갱신

 

3. 풀이 코드

/**
 * @param {number[][]} intervals
 * @return {number[][]}
 */
var merge = function(intervals) {
  intervals.sort((a,b) => a[0]-b[0]);

  const result = [];
  let current = intervals[0];

  for(let i = 1; i < intervals.length; i++) {
    const [start, end] = intervals[i];

    if(start <= current[1]) {
      // 겹치면 끝값 갱신
      current[1] = Math.max(current[1], end);
    } else {
      // 겹치지 않으면 결과에 push
      result.push(current);
      current = [start, end];
    }
  }

  result.push(current); // 마지막 구간 추가

  return result;
};
  • 정렬 후 연속 구간을 비교 → O(n log n + n)
  • 정렬을 먼저 하지 않으면 겹치는 구간이 뒤쪽에 나타나 병합이 어려움
  • 병합 시에는 단순히 끝값(max) 갱신 → 불필요한 반복 제거

예시 시나리오

입력: [[1,3],[2,6],[8,10],[15,18]]

current 비교 구간 병합 여부 결과
[1,3] [2,6] O current = [1,6]
[1,6] [8,10] X result.push([1,6]), current=[8,10]
[8,10] [15,18] X result.push([8,10]), current=[15,18]
마지막 - - result.push([15,18])

최종 결과 → [[1,6],[8,10],[15,18]]

시간 및 공간 복잡도

항목 복잡도 설명
시간 복잡도 O(n log n) 정렬: O(n log n), 순회: O(n)
공간 복잡도 O(n) 결과 배열 저장

 

4. 핵심 정리

개념 설명
문제 유형 Array, Sorting, Interval
핵심 아이디어 시작값 기준 정렬 후, 연속 구간은 끝값 갱신, 겹치지 않으면 결과에 push
핵심 변수 current, result, [start,end]
시간 복잡도 O(n log n)
공간 복잡도 O(n)
포인트 정렬 후 단일 순회 → 효율적 병합, 끝값 갱신으로 중복 계산 제거

 

'Coding Test > LeetCode' 카테고리의 다른 글

49. Group Anagrams  (0) 2025.10.21
57. Insert Interval  (0) 2025.10.20
3. Longest Substring Without Repeating Characters  (0) 2025.10.19
209. Minimum Size Subarray Sum  (0) 2025.10.19
45. Jump Game II  (0) 2025.10.15
'Coding Test/LeetCode' 카테고리의 다른 글
  • 49. Group Anagrams
  • 57. Insert Interval
  • 3. Longest Substring Without Repeating Characters
  • 209. Minimum Size Subarray Sum
JTB
JTB
웹/앱 개발 정보를 공유하고 있습니다.
  • JTB
    JTechBlog
    JTB
  • 전체
    오늘
    어제
    • All About Programming;)
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
      • Frontend
        • Javascript Essentials
        • Perfomance Optimization
        • JS Patterns
        • React
        • Next.js
        • Flutter
        • Testing
      • Backend
        • Node.js
      • DevOps
        • Docker & Kubernetes
      • Coding Test
        • LeetCode
        • Programmers
      • Tech Books & Lectures
        • Javascript_Modern JS Deep d..
        • Network_IT 엔지니어를 위한 네트워크 입문
      • Projects
        • PolyLingo_2025
        • Build Your Body_2024
        • JStargram_2021
        • Covid19 Tracker_2021
        • JPortfolio_2021
      • BootCamp_Codestates
        • TIL
        • TILookCloser
        • Pre Tech Blog
        • IM Tech Blog
        • Daily Issues and DeBugging
        • First Project
        • Final Project
        • Sprint Review
        • Good to Know
        • Socrative Review
        • HTML &amp; CSS
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 글쓰기
    • 관리
  • 공지사항

  • 인기 글

  • 태그

    Shared resources
    커리어
    자바스크립트 딥다이브
    testing
    DOM
    모던 자바스크립트 Deep Dive
    Data Structure
    Network
    Javascript Essentials
    need a database
    indie hacker
    js pattern
    스코프
    딥다이브
    자바스크립트
    mobile app
    leetcode
    Binary Tree BFS
    How memory manage data
    database
    Threads and Multithreading
    polylingo
    이벤트
    Operating System
    프론트엔드 성능 최적화 가이드
    CPU scheduling algorithm
    VoiceJournal
    Time complexity and Space complexity
    structure of os
    TCP/IP
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
JTB
56. Merge Intervals
상단으로

티스토리툴바