본문 바로가기
알고리즘

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

by limew 2023. 8. 7.
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

첫풀이

끝에서 끝사이 range를 구한뒤 롤러길이만큼 나눈뒤

총 칠한 횟수 = 몫 + 나머지가 있으면 +1 해줬다.

function solution(n, m, section) {
    const range = section[section.length-1] - section[0] + 1;
    const division = Math.floor(range / m);
    const remain = range % m;
    return division + (remain ? 1 : 0);
}

 

반례)

위 풀이는 처음 시작점부터 끝점까지 롤러로 다 칠하는 경우다.

아래와 같이 두 사이에 공백이 없으면 그 사이를 칠할필욘 없다.

 

 

두번째 풀이

한번 칠할때 마지막으로 칠해지는 인덱스보다 구멍의 인덱스가 크면  answer++해주고 last = 현재 인덱스 + 롤러길이-1

작거나 같으면 이미 칠해져있단 뜻이므로 패스

 

function solution(n, m, section) {
    let answer = 0;
    let last = 0; // 마지막으로 칠해진 인덱스
    while(last < section[section.length-1]) {
        for (const s of section) {
            // 현재구멍이 마지막으로 칠해진 인덱스보다 크면 칠한횟수++, 마지막으로 칠해진 인덱스 업뎃
            if (s > last) {
                answer++;
                last = s + m - 1;
            }
        }
    }
    return answer;
}