[코딩테스트] 47. 수열과 구간 쿼리 4

편준민's avatar
May 22, 2025
[코딩테스트] 47.  수열과 구간 쿼리 4

문제

💡
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

제한사항

  • 1 ≤ arr의 길이 ≤ 1,000
    • 0 ≤ arr의 원소 ≤ 1,000,000
  • 1 ≤ queries의 길이 ≤ 1,000
    • 0 ≤ s ≤ e < arr의 길이
    • 0 ≤ k ≤ 5

예시

notion image

풀이

해당 문제는 이전 분제와 동일하게 queries의 인덱스의 크기의 역할이 정해져 있기 때문에 우선 적으로 그 역할에 맞게 변수를 선언해주었다. 1번indexarr를 탐색 할 시작 지점start이고, 2번indexarr를 탐색 할 마지막 지점end이다. 그리고 3번index는 배수를 구할 수 있게 해주는 수num 이다.
현재 arr[]indexnum의 배수이면 arr[] index+1 을 해주어야한다. 배수를 구하는 방법은 num 으로 해당 수를 나누었을 때 0이 되면 num에 배수에 해당 하는 수이다. 그래서 j % num == 0 이라는 조건문으로 배수 일 경우에는 arr[j]++ 을 하여서 해당 index만 1을 더 할 수 있게 해주었다. 그리고 num이 0 일 경우에는 어떠한 수도 0으로 나눌 수 없기 때문에 JAVA에서는 오류를 터친다. 그것을 막기 위해서 &&조건으로 num ≠ 0 일때만 통과 하게 만들었다.
public class ex25 { public static void main(String[] args) { int[] arr = {0, 1, 2, 4, 3}; int[][] queries = {{0, 4, 1}, {0, 3, 2}, {0, 3, 3}}; for (int i = 0; i < queries.length; i++) { int start = queries[i][0]; int end = queries[i][1]; int num = queries[i][2]; for (int j = start; j <= end; j++) { if (num != 0 && j % num == 0) { arr[j]++; } } } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i]); } System.out.println(); } }
notion image
 
Share article

YunSeolAn