본문 바로가기
Coding Test/Java Coding Test

[프로그래머스 / 자바] - 수열과 구간 쿼리 4

by nam_ji 2024. 7. 23.

수열과 구간 쿼리 4

문제    

  • 정수 배열 arr과 2차원 정수 배열 queries가 매개변수로 주어집니다.
  • queries의 원소는 각각 하나의 query를 나타내고, [s, e, k] 형태입니다.
  • 각 qeury마다 순서대로 s <= i <= e인 모든 i에 대해
  • i가 k의 배수이면 arr[i]에 1을 더합니다.
  • 규칙에 맞게 queries를 처리한 arr을 출력하는 문제입니다.
  • 입출력 예
    • arr queries result
      [0, 1, 2, 4, 3] [[0, 4, 1],[0, 3, 2],[0, 3, 3]] [3, 2, 4, 6, 4]


테스트 (인텔리제이)

  • s, e, k를 쉽게 확인하기 위해 변수 선언을 합니다.
  • for문을 이용하여 queries만큼 순회하도록 하고
  • queries에서 원소를 꺼내 s, e, k에 저장합니다.
  • arr의 크기만큼 순회하는 2중 for문을 만들어 순회하도록 하고
  • if문으로 arr의 크기만큼 순회하는 j의 값을 s와 e 범위에 포함되는지 k의 배수인지 체크해서 answer 배열에 +1 더해줄 수 있도록 하면 문제를 풀 수 있습니다.
package com.namji.codingtest;

import java.util.Arrays;

public class 수열과_구간_쿼리_4 {
  public static void main(String[] args) {
    /*
    정수 배열 arr과 2차원 정수 배열 queries가 매개변수로 주어집니다.
    queries의 원소는 각각 하나의 query를 나타내고, [s, e, k] 형태입니다.
    각 qeury마다 순서대로 s <= i <= e인 모든 i에 대해
    i가 k의 배수이면 arr[i]에 1을 더합니다.
    규칙에 맞게 queries를 처리한 arr을 출력하는 문제입니다.

    입출력 예
    arr	              queries	                          result
    [0, 1, 2, 4, 3]	  [[0, 4, 1],[0, 3, 2],[0, 3, 3]]	  [3, 2, 4, 6, 4]

    입출력 설명
    #1
    각 쿼리에 따라 arr가 다음과 같이 변합니다.
    arr
    [0, 1, 2, 4, 3]
    [1, 2, 3, 5, 4]
    [2, 2, 4, 5, 4]
    [3, 2, 4, 6, 4]
    따라서 [3, 2, 4, 6, 4]를 return 합니다.
     */

    int[] arr = {0, 1, 2, 4, 3};
    int[][] queries = {{0, 4, 1}, {0, 3, 2}, {0, 3, 3}};
    int[] answer = Arrays.copyOf(arr, arr.length);
    int s, e, k = 0;

    for (int i = 0; i < queries.length; i++) {
      s = queries[i][0];
      e = queries[i][1];
      k = queries[i][2];
      for (int j = 0; j < arr.length; j++) {
        if (s <= j && e >= j && j % k == 0) {
          answer[j] += 1;
        }
      }
    }
    System.out.println(Arrays.toString(answer));
  }
}

프로그래머스 코드

import java.util.*;

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = Arrays.copyOf(arr, arr.length);
        int s, e, k = 0;
        
        for (int i = 0; i < queries.length; i++) {
            s = queries[i][0];
            e = queries[i][1];
            k = queries[i][2];
            for (int j = 0; j < arr.length; j++) {
                if (s <= j && e >= j && j % k == 0) {
                    answer[j] += 1;
                }
            }
        }
        return answer;
    }
}