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
히어운트예츠트
히어운트예츠트
건축학 -> 경제학 -> 호주 워홀 -> 해외영업 -> 개발자 -> ?
  • 히어운트예츠트
    기술블로그
    히어운트예츠트
  • 전체
    오늘
    어제
    • All About Programming;)
      • Other than Tech
        • 잡생각
      • Computer Science
        • Terminology and Concepts
        • Network
        • Operating System
        • Database
        • Data Structure
        • Web Development
        • Interview Prep
      • 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
        • Nativ_2026
      • 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
  • 블로그 메뉴

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

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

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
히어운트예츠트
56. Merge Intervals
상단으로

티스토리툴바