Programmers
[프로그래머스][JS] 수열과 구간 쿼리 4
winter17
2023. 6. 11. 16:09
https://school.programmers.co.kr/learn/courses/30/lessons/181922
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
풀이 과정
function solution(arr, queries) {
var answer = [];
let array = arr.slice() // 깊은 복사
for (let i = 0; i < queries.length; i++){
const [s, e, k] = queries[i]
// console.log(s, e)
for (let j = s; j <= e; j++){ // s부터 e까지
// console.log(j)
if (j % k === 0){ // s부터 e까지 수 중에 k의 배수인 경우에만
array[j]++ // 인덱스로 접근해서 해당하는 원소에 +1
// console.log(array)
}
}
}
return array;
}
s, e가 0, 4일 때, 0 <= i <= 4이고 i = 0, 1, 2, 3, 4이다.
k = 1이므로 i 중 k의 배수는 0, 1, 2, 3, 4 모두 해당된다. 이때 i는 인덱스를 가리키므로 array배열에 인덱스로 접근해서 해당하는 원소에 +1을 하면 된다.
초반에 arr배열을 복사해서 array 새 배열을 생성한 이유는 반복할 때마다, 조건에 충족할 때마다, 값을 업데이트해줘야 하기 때문이다.
요소 값이 k의 배수인게 아니라 인덱스가 k의 배수인 것 명심하기!
리뷰
수열과 구간 쿼리 문제가 다양하게 있는데 처음에 이런 유형 풀 때가 힘들었고 오늘 푼 문제는 이전 문제들과 흐름이 비슷해서 수월했다
하지만, 배열을 복사할 때, slice로 깊은 복사를 해줘야 한다는 점을 까먹고 했다가 값이 업데이트가 되지 않아서 조금 헤맸다.