첫풀이
끝에서 끝사이 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;
}
'알고리즘' 카테고리의 다른 글
[프로그래머스 LV2] 광물캐기 (0) | 2023.08.22 |
---|---|
[프로그래머스lv2] 과제 진행하기 (0) | 2023.08.11 |
[프로그래머스] 한 번만 등장한 문자 (0) | 2023.07.27 |
[프로그래머스] 귤 고르기 (0) | 2023.07.18 |
[프로그래머스] 숫자의 표현 (0) | 2023.07.17 |