덧칠하기
https://school.programmers.co.kr/learn/courses/30/lessons/161989
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
function solution(n, m, section) {
let answer = 0;
let paint = 0;
for (const s in section) {
if (paint < section[s]) {
paint = section[s] + (m-1);
answer += 1;
}
}
return answer;
}
- paint: 현재까지 페인트를 칠한 벽의 마지막 구역 번호를 저장하는 변수이다.
- for문은 현재 페인트를 칠해야하는 구역(section[s])의 번호가 paint보다 큰 경우에만 실행된다. 다시 말해서, 이미 페인트칠한 벽의 구역 이후의 구역에만 새롭게 페인트칠을 한다는 것이다.
- 만약에 페인트칠을 새롭게 한다면, 롤러의 길이인 m 만큼의 페인트를 칠한다. 페인트를 칠한 벽의 마지막 구역 번호는 section[s] + (m-1)이 된다.
- 예를 들어서 롤러의 길이가 3미터이고, 현재 페인트를 칠해야 하는 구역의 번호가 5라고 가정하자.
- 이 때, 롤러를 사용해서 페인트를 한 번에 칠할 수 있는 벽의 마지막 구역의 번호는 5번 구역부터 시작해서 롤러를 사용하여 7번까지 한 번에 페인트가 가능하다. (5 + 3 - 1 = 7)
- m에서 -1을 하는 이유는 현재 구역 번호를 포함해서 카운트하기 때문이다.
- 마지막으로 새롭게 페인트 칠을 할때마다 answer의 값이 1이 추가되어 새롭게 페인트칠한 총 횟수가 반환된다.
'JS > 알고리즘(코테)' 카테고리의 다른 글
프로그래머스 코딩테스트 LV.0 - 문자열이 몇 번 등장하는지 세기 (0) | 2023.08.23 |
---|---|
프로그래머스 코딩테스트 LV.1 - 기사단원의 무기 (0) | 2023.08.18 |
프로그래머스 코딩테스트 LV.1 - 가장 가까운 같은 글자 (0) | 2023.07.23 |
프로그래머스 코딩테스트 LV.1 - 소수 만들기 (0) | 2023.07.22 |
프로그래머스 코딩테스트 LV.1 - 과일 장수 (0) | 2023.07.18 |