문제
정수 배열
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
예시

풀이
해당 문제는 이전 분제와 동일하게
queries
의 인덱스의 크기의 역할이 정해져 있기 때문에 우선 적으로 그 역할에 맞게 변수를 선언해주었다.
1번index
는 arr
를 탐색 할 시작 지점start
이고,
2번index
는 arr
를 탐색 할 마지막 지점end
이다.
그리고 3번index
는 배수를 구할 수 있게 해주는 수num
이다.현재
arr[]
에 index
가 num
의 배수이면 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();
}
}

Share article