한 걸음씩
[프로그래머스][JS] 덧칠하기 본문
https://school.programmers.co.kr/learn/courses/30/lessons/161989
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(n, m, section) {
// 길이가 n개인 배열을 생성하는데 요소를 true로 채우기
const arr = Array.from({length:n}).fill(true)
// section에 있는 요소들을 arr에서 false로 바꾸기
for (let i = 0; i < section.length; i++){
arr[section[i] - 1] = false
}
// arr배열을 반복할 때 false가 나오면 splice메서드로 m만큼 true로 바꿔주는데
// 모두가 false가 나오지 않을 때까지 cnt에 횟수를 기록
let cnt = 0
for (let i = 0; i < arr.length; i++){
if (arr[i] === false){
arr.splice(i, m, true)
cnt++
}
}
return cnt;
}
마지막 반복문에서 splice 메서드를 사용하여 true로 바꿀 때 arr배열을 콘솔로 찍어서 확인해 보면
원하는 배열 모양이 안나와서 왜 그런지 봤더니 splice 메서드를 사용하는 부분에서 인덱스 i에서 m개를 삭제하고 true로 바꿔라는 코드를 작성했는데 m개만큼 true가 채워지는 게 아니라 삭제는 m개를 하지만, true를 채우는 건 한 번이기 때문에 배열의 길이를 보장을 하지 못한다.
위의 코드로 통과는 됐지만 정확한 코드라고는 할 수 없다. 그래서 수정을 해보면 다음과 같다
function solution(n, m, section) {
const arr = Array.from({length:n}).fill(true)
for (let i = 0; i < section.length; i++){
arr[section[i] - 1] = false
}
let cnt = 0
for (let i = 0; i < arr.length; i++){
if (arr[i] === false){
// 0부터 m - 1까지 반복을 해서
for (let j = 0; j < m; j++) {
// arr[i]부터 m - 1까지 true로 바꿔야하니까 i + j
arr[i + j] = true;
}
cnt++
}
}
return cnt;
}
리뷰
splice메서드를 사용해도 문제 통과를 하지만 정확한 결과를 불러오진 못하기 때문에 적절한 선택은 아닌 것 같다.
두 번째 코드가 배열 길이를 그대로 유지하고 예시 결과를 불러오는 과정이 똑같기 때문에 더 적절한 코드!
'Programmers' 카테고리의 다른 글
[프로그래머스][JS] [1차] 비밀지도 (0) | 2023.07.19 |
---|---|
[프로그래머스][JS] 기사단원의 무기✅ (0) | 2023.07.18 |
[프로그래머스][JS] 겹치는 선분의 길이 (0) | 2023.07.17 |
[프로그래머스][JS] 최소직사각형 (0) | 2023.07.17 |
[프로그래머스][JS] 소수 찾기 ✅ (0) | 2023.07.16 |