[프로그래머스] 덧칠하기 - JavaScript

유아현·2023년 5월 6일
0

Coding Test

목록 보기
2/2
post-thumbnail

📌 카드 뭉치

🌱 나의 풀이

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대가 나왔다... 다른 사람 코드도 구경해야겠다.

0개의 댓글