프로그래머스 수열과 구간 쿼리 4 Lv.0

KUKJIN LEE's profile picture

KUKJIN LEE3주 전 작성

function solution(arr, queries) {
    let answer = [];
    answer = arr;
    
    for(let i = 0; i < queries.length; i++){
        let s = queries[i][0];
        let e = queries[i][1];
        let k = queries[i][2];
        
        for(let j = s; j <= e; j++){
            if(k !== 0 && j % k === 0) {
                answer[j] += 1;
            }
        }
    }
    return answer;
}

우선 for문을 시작해서 s, e, k 값을 구합니다.

  • s = queries[i][0]: 쿼리 시작 인덱스입니다.
  • e = queries[i][1]: 쿼리 종료 인덱스입니다.
  • k = queries[i][2]: 배수를 확인할 기준입니다.

 

문제를 다시 살펴보겠습니다.

각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해, i가 k의 배수이면 arr[i]에 1을 더합니다.

 

예를 들어 s=2라고 가정할 때, for (let j = 2; j <= e; j++)와 같은 형태로 범위를 포함해서 반복문을 돌린다고 볼 수 있습니다.

 

이제 안쪽 for문이 돌아가면서 if문 조건을 확인하게 됩니다.


j % k === 0이라면 j가 k의 배수인지를 확인하는 것인데, 예를 들어 k=2이고 j=4라면, 4 % 2 === 0이므로 arr[j] += 1을 진행합니다.

 

만약 k=2이고 j=5라면, 5 % 2 === 1이기 때문에 조건에 해당하지 않아 넘어가게 됩니다.

 

반복문이 전부 돌면 원하는 결과값을 얻을 수 있습니다.

(문제 기본값으로 가장 상단에 answer를 선언해놨기 때문에 answer = arr;로 교체해놨습니다.)

 

“반복문과 2차원 정수 배열을 이해했는지” 확인하는 문제로 보입니다.

New Tech Posts