728x90
반응형
문제설명
문제분석
먼저 단순하게 접근해 모든 벽을 칠할 때 필요한 count를 세아리는 방법으로 접근합니다.
function solution(n, m, section) {
const wall = Array.from({ length: n + 1}).map((_, i) => section.includes(i) ? false : true);
let count = 0;
for(let i = 1; i <= n; i++) {
if(wall[i] === false) {
for(let j = 0; j < m; j++) {
wall[i + j] = true;
}
count++;
}
}
return count;
}
이렇게 작성해도 문제를 통과하지만, 속도가 매우 답답합니다. 이 문제를 해소하는 형태로 접근법을 바꿔보겠습니다.
이해하기 쉽게 코드작성하기
function solution(n, m, section) {
let answer = 0;
let paintedWall = 0;
for(const wall of section) {
if(wall > paintedWall) {
answer++;
paintedWall = wall + m - 1;
}
}
return answer;
}
section에 포함된 요소는 페인트 칠이 필요한 벽입니다. 따라서 이 벽부터 시작해서 m칸 만큼 칠하고 count를 올립니다. section의 이전요소에서 칠해진 벽을 (현재 벽 + m -1)을 업데이트했으므로 section의 현재 요소가 칠해졌는지 확인합니다. 칠해졌다면 아무것도 하지 않고, 칠해지지 않았다면 다시 칠해주고 업데이트 합니다. 마지막으로 몇 번 칠해줬는지 count를 리턴하면 됩니다.
728x90
반응형
'Practice for coding test' 카테고리의 다른 글
프로그래머스 - Level 2. 무인도 여행 / JavaScript (js) (0) | 2023.03.09 |
---|---|
프로그래머스 - Level 2. 미로 탈출 / JavaScript (js) (0) | 2023.03.08 |
프로그래머스 - Level 2. 숫자 변환하기 / JavaScript (js) (0) | 2023.03.06 |
프로그래머스 - Level 2. 유사 칸토어 비트열 / JavaScript (js) (0) | 2023.03.05 |
프로그래머스 - Level 2. 2개 이하로 다른 비트 / JavaScript (js) (0) | 2023.03.04 |