수열과 구간 쿼리 1, 정수 배열과 이차원 정수 배열을 통해 구간 쿼리 별 값 제어 방법에 대하여(with.Java)
수열과 구간 쿼리에 대하여 알아본 글입니다.
코딩 테스트 문제를 풀며, 풀었던 문제에 대한 회고와 다른 풀이 방법을 알아보며, 알아가고자 합니다.
문제에 대해 먼저 알아보겠습니다.
문제
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다.
queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
입출력 예시
arr | queries | result |
---|---|---|
[0, 1, 2, 3, 4] | [[0, 1],[1, 2],[2, 3]] | [1, 3, 4, 4, 4] |
문제에 대한 나의 풀이
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = arr;
int idx = 0;
for(int i = 0; i < queries.length; i++){
for(int j = queries[i][0]; j <= queries[i][1]; j++){
answer[j] += 1;
}
}
return answer;
}
}
풀이 설명
int[] answer = arr;: 결과 배열 answer를 arr로 초기화합니다. 이렇게 하면 answer는 arr과 같은 배열을 가리키게 됩니다.
for(int i = 0; i < queries.length; i++) : queries 배열을 반복하면서 각 쿼리를 처리합니다.
for(int j = queries[i][0]; j <= queries[i][1]; j++) : 각 쿼리에 대한 범위를 반복하면서 해당 범위 내의 answer 배열 요소를 1씩 증가시킵니다.
return answer;: 모든 쿼리를 처리한 후, 변경된 answer 배열을 반환합니다.
이 코드는 queries 배열에 있는 범위에 해당하는 arr의 요소를 1씩 증가시키는 작업을 수행합니다.
하지만 주의할 점은 answer 배열이 arr 배열을 참조하므로, 이 작업은 arr 배열에도 영향을 미칩니다.
따라서 arr 배열을 변경하지 않고 새로운 배열에 결과를 저장하려면 새로운 배열을 생성하고 그 배열을 변경해야 합니다.