개발자 되는 법.../코딩테스트...
[JS] 덧칠하기
개발_자
2024. 8. 14. 09:56
function solution(n, m, sections) {
let answer = 0;
let painted = 0;
for(const section of sections) {
if(painted < section) {
answer++;
painted = section + m - 1;
}
}
return answer;
}
sections 배열의 각 `section`을 순회하면서 페인트가 필요한 구간의 시작 위치를 가져옵니다.
현재 `painted`(페인트가 칠해진 마지막 위치)가 `section`(현재 구간의 시작 위치)보다 작다면, 현재 구간은 페인트칠이 되어 있지 않은 상태입니다.
새로운 페인트칠이 필요하므로 `answer`를 증가시킵니다.
새로 페인트필을 시작하면 `section`에서 `m`길이만큼의 페인트가 칠해지므로, 페인트가 칠해진 구간의 끝을 `section + m -1`로 업데이트합니다.
n = 10 (벽의 길이) (이 값은 코드에서 사용되지 않음)
m = 3 (페인트의 길이)
sections = [1, 4, 6]
이 경우:
처음에는 painted = 0이므로 section = 1을 페인트칠. answer를 1로 증가시키고, painted를 1 + 3 - 1 = 3으로 업데이트.
다음 section = 4는 painted = 3보다 크므로, 새로운 페인트칠이 필요. answer를 2로 증가시키고, painted를 4 + 3 - 1 = 6으로 업데이트.
마지막으로 section = 6은 현재 painted = 6 범위 내에 있으므로, 추가 페인트칠이 필요하지 않음.
결과적으로, 최소 2번 페인트칠이 필요하다는 결과를 반환합니다.
다른 사람 풀이
function solution(n, m, section) {
let answer = 0;
for(let i=1; i<n+1; i++){
if(section.includes(i)){
answer += 1
i = i +m-1
continue;
}
}
return answer;
}
function solution(n, m, section) {
let answer = 0;
// 현재까지 칠한 구역
let part = 0;
// section을 forEach() 메서드로 하나씩 확인한다.
section.forEach((n) => {
// 현재 구역이 현재까지 칠한 구역보다 크다면
if (n > part) {
// 구역을 칠해주고 현재까지 칠한 구역을 업데이트 시켜준다.
part = n + m - 1;
// 페인트를 칠했으니 1증가 시킨다.
answer++;
}
});
return answer;
}