function solution(n, m, section) {
const arr = Array.from(Array(n), (_, index) => index + 1);
let paint = 0;
arr.forEach( (e, idx)=> {
if(section.includes(e)){
for(let i = 0 ; i < m ; i++){
arr[idx+i] = 0;
}
paint++
}
});
return paint;
}
solution(8, 4, [2, 3, 6]);
나의 접근 방법은 벽을 n
만큼의 구역으로 나뉜다고 하였으니 n
만큼의 구역으로 나뉘어진 배열을 만들었다. 배열의 요소로는 각 구역에는 왼쪽부터 순서대로 1번부터 n
번까지의 번호를 붙였다고 하였으니 각 요소를 1, 2, 3, 4... 와 같은 형식으로 n
까지 만들어 주었다.
const arr = Array.from(Array(n), (_, index) => index + 1);
그리고 n
만큼의 구역으로 나뉘어진 배열 arr를 순회하면서 arr의 요소(구역)가 다시 덧칠해야할 section 배열의 요소에 속한다면
if(section.includes(e))
그 구역부터 롤러의 길이인 m
까지 칠해야 하므로 forEach의 idx
를 활용하여 해당 위치부터 +i
씩 해서 arr의 해당 구역에 칠했다는 표시인 0
을 재할당 해 주기로 했다.
for(let i = 0 ; i < m ; i++){ arr[idx+i] = 0; }
그렇게 롤러의 길이까지 다 칠했다면 한 번의 페인트칠이 끝난 것이므로 전에 선언해 둔 paint에 count를 해 주고, 마지막으로 paint를 리턴해 주었다! 테스트 케이스가 50개나 있어서 돌아갈 때 쫄렸으나 바로 풀려서 당황했던 문제 ㅎㅎ 그래도 기분은 좋다... 근데 forEach 안에 또 for문을 돌려서 이중이라 속도가 40대가 나왔다... 다른 사람 코드도 구경해야겠다.