아니... 코딩기초트레이닝이 왜이렇게 어려운거지? 코딩기초트레이닝 추천문제.. day6 중인데... '수열과 구간 쿼리3'가 너무 어려워서 못풀겠는데....바로 다음 문제가 수열과 구간쿼리2가 나오길래... 일부러 검색해서 '수열과 구간쿼리1'을 풀기 시작했다. 왠지 1이라고 되어 있으니까 쉬운거겠지 ? 하고... 근데 이것조차 어렵다.
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
문제 : 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e] 꼴입니다. 각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 arr[i]에 1을 더합니다. 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
매개변수 :
arr = [0, 1, 2, 3, 4];
queries = [[0, 1],[1, 2],[2, 3]];
결과 : [1,3,4,4,4]
개선한 코드.... 테스트 통과 / 채점 통과
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = Arrays.copyOf(arr, arr.length);
for(int i=0; i<queries.length; i++){
int s = queries[i][0];
int e = queries[i][1];
for(int j=s; j<=e; j++){
answer[j]++;
}
}
return answer;
}
}
처음에 짠것..... 테스트 통과 / 채점에서 다 실패.
실패한 이유 : queries 배열에서 주어지는 범위 [s, e]를 잘 이해하지 못해 발생한 문제. queries 배열에 있는 각 쿼리의 범위 [s, e] 내의 모든 요소에 1을 더하는 것이 목표인데 이 코드에서는 각각의 요소에 1을 더하는 대신, 해당 요소의 인덱스에 1을 더하고 있다.
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[arr.length];
//[1] arr을 answer로 복사
for(int i=0;i<arr.length;i++){
answer[i] = arr[i];
}
//[2] queries[i] 0,1,2
for(int i=0;i<queries.length;i++){
//[3] queries[][j] 0,1
for(int j=0; j<queries[i].length; j++){
int arrIndex = queries[i][j];
answer[arrIndex]++;
}
}
return answer;
}
}
수열과 구간 쿼리... 어렵게만 느껴진다.. 근데 2 / 4 가 남아있다..