
내가 생각했을때 문제에서 원하는부분
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다.
queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
내가 이 문제를 보고 생각해본 부분
Main62 클래스는 프로그램의 진입점인 main 메서드를 포함하고 있다.
main 메서드는 먼저 Solution9 클래스의 객체를 생성한다.
테스트용 정수 배열 arr과 쿼리 배열 queries를 정의한다. 여기서 arr은 [0,1,2,3,4]이며, queries는 [[0,1],[1,2],[2,3]]이다.
solution.solution(arr, queries) 호출을 통해 arr에 쿼리를 순차적으로 적용한 결과 배열을 반환받는다.
Arrays.toString(result) 메서드를 이용해 최종 결과 배열을 문자열로 변환하여 콘솔에 출력한다. 결과는 [1, 3, 4, 4, 4]가 된다.
Solution9 클래스는 문제의 핵심 로직을 담당한다.
solution 메서드는 입력 배열 arr과 2차원 배열 queries를 매개변수로 받는다.
queries 배열의 각 쿼리를 반복하며 처리한다.
각 쿼리는 [start, end] 구간을 나타내므로, 이 구간 내 인덱스에 포함된 배열 요소들에 1씩 더한다.
내부 for문에서 start부터 end까지 순서대로 배열 요소 값을 1씩 증가시킨다.
모든 쿼리 처리 후 변경된 배열 arr을 반환한다.
코드로 구현
class Solution {
public int[] solution(int[] arr, int[][] queries) {
for (int[] query : queries) {
int start = query[0];
int end = query[1];
for (int i = start; i <= end; i++) {
arr[i] += 1;
}
}
return arr;
}
}
프로그래머스 코드
package programmers;
import java.util.Arrays;
// 프로그래머스 수열과 구간 쿼리 1
public class Main62 {
public static void main(String[] args) {
Solution9 solution = new Solution9();
int[] arr = {0, 1, 2, 3, 4};
int[][] queries = {{0, 1}, {1, 2}, {2, 3}};
int[] result = solution.solution(arr, queries);
System.out.println(Arrays.toString(result)); // [1, 3, 4, 4, 4] 출력
}
}
class Solution9 {
public int[] solution(int[] arr, int[][] queries) {
for (int[] query : queries) {
int start = query[0];
int end = query[1];
for (int i = start; i <= end; i++) {
arr[i] += 1;
}
}
return arr;
}
}
위에 있는 코드를 변경한 코드
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.