https://leetcode.com/problems/merge-intervals/
Given a collection of intervals, merge all overlapping intervals.
주어진 간격 배열에서 겹치는 부분을 합쳐라.
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].
[1,3] ~ [2,6] 에서 [3], [2] 부분이 겹치게 되는데, 결과적으로 [1,6] 로 합칠 수 있다.
그래서 다음을 큰 전제로 두고 답을 구해나갔다.
=> 이전 요소의 마지막 인덱스의 값3이 다음 요소의 첫번째 인덱스의 값2 보다 작으면 두 요소를 합친다.
그런데 이 하나로 끝날만큼 답이 단순하지는 않아서 예외 조건을 추가하느라 코드가 간단하게 만들어지지 않았다.
(오름차순 정렬, prevLastNum를 머지한 값의 마지막 인덱스 값이라 두는 것)
/**
* @param {number[][]} intervals
* @return {number[][]}
*/
var merge = function (intervals) {
// interval[0] 기준 오름차순 정렬
intervals.sort((a, b) => {
return a[0] - b[0];
});
let answer = []; //
let prevLastNum = 0; // answer의 바로 전 배열 객체의 [1]번째 인덱스의 값
intervals.map((interval, idx) => {
let [a, b] = interval;
if (idx > 0 && prevLastNum >= a) {
let prevA = answer[answer.length - 1][0],
prevB = answer[answer.length - 1][1];
if (prevB > b) {
b = prevB;
}
// merge
answer.pop();
answer.push([prevA, b]);
} else {
answer.push(interval);
}
prevLastNum = answer[answer.length - 1][1]; // 이전 요소 마지막 인덱스값 리셋
})
return answer;
};