프로그래머스/Lv. 0(코딩 기초 트레이닝)

[프로그래머스 코딩테스트] 수열과 구간 쿼리 1(Java)

Sigfriede 2023. 5. 9. 01:10

  문제 설명

  정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.

  각 query마다 순서대로 s <= i <= e인 모든 i에 대해 arr[i]에 1을 더합니다.

  위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

 

  제한사항

  • 1 <= arr의 길이 <= 1,000
  • 0 <= arr의 원소 <= 1,000,000
  • 1 <= queries의 길이 <= 1,000
  • 0 <= s <= e < arr의 길이

 

  입출력 예

arr queries result
[0, 1, 2, 3, 4] [[0, 1], [1, 2], [2, 3]] [1, 3, 4, 4, 4]
import java.util.Arrays;
class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < queries.length; j++) {
                if (queries[j][0] <= i && i <= queries[j][1]) {
                    arr[i] += 1;
                }
            }
        }
        int[] answer = Arrays.copyOf(arr, arr.length);
        return answer;
    }
}

  for문이 arr의 길이만큼 순회합니다. 이는 arr를 순회하는 바깥 for문입니다. 안쪽 for문에서 for문은 queries의 길이만큼 순회합니다. queries는 이차원 배열이지만, 열의 값과 개수는 고정이므로 별도로 구하지 않아도 될 것 같습니다.

  만약 queries의 j번째 행 0번째 열이 i보다 작고, 동시에 queries의 j번째 행과 1번째 열이 i보다 크다면, arr의 i번째 원소에 1씩 더해줍니다.

  구한 값을 answer에 직접 할당하는 방식이 아닌, arr값이 변경하였으므로 배열 복사를 이용하여 answer에 할당하겠습니다. Arrays 클래스의 copyOf 메소드를 이용하여 arr 배열을, 종료 지점을 인자로 받는 부분에는 arr의 길이를 넣습니다. 배열 전체를 복사한다는 뜻입니다. 이를 answer에 할당합니다.