안녕하세요

프로그래머스 JS [덧칠하기] 본문

프로그래머스/Lv.1

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

sakuraop 2023. 4. 13. 23:45

덧칠하기 문제보기

문제 요약

n미터인 벽을 m길이의 페인터로 칠하는 최소한의 횟수를 구하시오.

 

문제 조건

각 구역에 왼쪽부터 순서대로 1번부터 n번까지 번호
벽에 페인트를 칠하는 롤러의 길이는 m미터
롤러가 벽에서 벗어나면 안 됩니다.
구역의 일부분만 포함되도록 칠하면 안 됩니다.
페인트칠을 하는 횟수를 최소화
정수 n, m과 다시 페인트를 칠하기로 정한 구역들의 번호가 담긴 정수 배열 section


문제 풀이

 
 
function solution(n, m, section) {
  section.reverse();
  let count = 0;
  while (section.length) {
    const currentSwipe = section[section.length - 1] + m - 1;
    count++;
    while (section[section.length - 1] <= currentSwipe) {
      section.pop();
    }
  }

  return count;
}
 

pop으로 칠한 영역을 제외하기 위해 section을 reverse합니다.

  section.reverse();

count로 칠한 횟수를 세립니다.

  let count = 0;

section의 길이가 남아 있지 않을 때까지 실행합니다.

  while (section.length) {

현재 칠하기 시작하는 영역 + 페인터의 길이에 포함되는 영역을 pop으로 제외합니다.

    const currentSwipe = section[section.length - 1] + m - 1;
    count++;
    while (section[section.length - 1] <= currentSwipe) {
      section.pop();
    }
  }