프로그래머스 수열과 구간 쿼리 4 Lv.0
KUKJIN LEE • 3일 전 작성
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차원 정수 배열을 이해했는지” 확인하는 문제로 보입니다.