알고리즘
[프로그래머스] 덧칠하기
limew
2023. 8. 7. 19:11
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
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;
}