프로그래머스

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

so_yeon_- 2024. 12. 3. 18:10

https://school.programmers.co.kr/learn/courses/30/lessons/161989

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr


접근방법

- 처음 문제를 풀었을때는 단순히 section의 [0]번째 값과 [section.length -1]번째 값을 뺀후 롤러의 길이만큼 나눈값에 나머지를 올림계산하면 답이 나올거라고 생각하고 접근했다.

 

1차 제출

function solution(n, m, section) {
    return Math.ceil((section[section.length - 1] - (section[0] - 1)) / m);
}

결과 : 54점

분석 : 문제의 핵심 조건인 최소 횟수를 만족하지 못하였다. 빈 공간 뿐만 아니라 모든 페인트 구간을 무조건 추가하는 로직이었기 때문이다.

 

2차 제출

function solution(n, m, section) {
    var answer = 0;
    var start = section[0];
    
    for(sectionObj of section){
        if(sectionObj >= start + m){
            answer ++;
            start = sectionObj;
        }
    }
    return answer + 1;
}

결과 : 100점

분석 : 처음 빈 공간인 위치를 start 변수에 담고 있다가, 이 공간을 벗어나면 새롭게 카운트를 증가시키도록 수정하였다.

반복이 끝나면 마지막 페인트 작업은 추가로 필요하므로 최종 카운트에서 +1을 추가했다.