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로 깊은 복사를 해줘야 한다는 점을 까먹고 했다가 값이 업데이트가 되지 않아서 조금 헤맸다.