Practice for coding test

프로그래머스 - Level 2. 덧칠하기 / JavaScript (js)

Gray Park 2023. 3. 7. 11:30
728x90
반응형

문제설명

문제분석

먼저 단순하게 접근해 모든 벽을 칠할 때 필요한 count를 세아리는 방법으로 접근합니다.

function solution(n, m, section) {
    const wall = Array.from({ length: n + 1}).map((_, i) => section.includes(i) ? false : true);
    
    let count = 0;
    
    for(let i = 1; i <= n; i++) {
        if(wall[i] === false) {
            for(let j = 0; j < m; j++) {
                wall[i + j] = true;
            }
            count++;
        }
    }
    
    return count;
}

이렇게 작성해도 문제를 통과하지만, 속도가 매우 답답합니다. 이 문제를 해소하는 형태로 접근법을 바꿔보겠습니다.

이해하기 쉽게 코드작성하기

function solution(n, m, section) {
    let answer = 0;
    let paintedWall = 0;
    
    for(const wall of section) {
        if(wall > paintedWall) {
            answer++;
            paintedWall = wall + m - 1;
        }
    }
    return answer;
}

section에 포함된 요소는 페인트 칠이 필요한 벽입니다. 따라서 이 벽부터 시작해서 m칸 만큼 칠하고 count를 올립니다. section의 이전요소에서 칠해진 벽을 (현재 벽 + m -1)을 업데이트했으므로 section의 현재 요소가 칠해졌는지 확인합니다. 칠해졌다면 아무것도 하지 않고, 칠해지지 않았다면 다시 칠해주고 업데이트 합니다. 마지막으로 몇 번 칠해줬는지 count를 리턴하면 됩니다.

728x90
반응형