해당 문제는 최소한의 섹션을 만들고 해당 섹션의 갯수를 구하는 문제다.
처음에는 Math Object 의 min, max 를 통해서 칠할 수 있는 구역을 구하고 중복되는 영역을 삭제하는 방식으로 구하려고 했지만 칠해야 하는 구역 자체를 구하는게 아니라 횟수를 구하는 것이기에 다음과 같은 방식으로 문제를 처리했다.
function solution(n, m, section) {
let paintedRange = null;
const paintCnt = section.reduce((total, current, index) => {
paintedRange = paintedRange || current + m - 1;
const nextPaintPoint = section[index + 1];
if(nextPaintPoint && paintedRange >= nextPaintPoint) {
return total;
}
if(!nextPaintPoint) {
return total;
}
paintedRange = null;
return total + 1;
}, 1);
return paintCnt;
}