Skip to content
Algorithm.js | Algorithm in JavaScript
Frame

Range

구간을 정렬해 겹침 여부를 판단하고 병합·분할하는 범위 처리 패턴과 대표 문제 전략을 정리

Oct 22, 2025

구간 병합

병합 불가능

병합 구간의 마지막 값의 end 값 < 현재 구간의 begin 값

current interval
-----------------
| |
------------
| |
last in merged intervals

병합 가능

현재 구간의 begin 값 < 병합 구간의 마지막 값의 end 값

current interval
-----------------
| |
------------
| |
last in merged intervals
[merged.at(-1[0], Math.max(merged.at(-1)[1], current.at(1)))]

구현

var merge = function(intervals) {
intervals.sort((a,b) => a[0] - b[0]);
const stack = [];
for (const interval of intervals) {
if (stack.length === 0 || stack.at(-1)[1] < interval[0]) {
stack.push(interval)
} else {
stack.at(-1)[1] = Math.max(
stack.at(-1)[1],
interval[1]
)
}
}
return stack;
};

구간 겹침 여부 판단

intervals.sort((a,b) => a[0] - b[0]);
const stack = [];
for (const interval of intervals) {
if (stack.length === 0 || stack.at(-1)[1] < interval[0]) {
stack.push(interval)
} else {
stack.at(-1)[1] = Math.max(
stack.at(-1)[1],
interval[1]
)
}
}
return stack;
};

기본 문제들

Reference