본문 바로가기
코테 준비(with 프로그래머스)

***프로그래머스 day7, Java - 수열과 구간 쿼리4

by jeong11 2023. 11. 23.
반응형
문제 설명

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 i가 k의 배수이면 arr[i]에 1을 더합니다. 
위 규칙에 따라 queries를 처리한 이후의 arr을 return하는 solution 함수를 완성해주세요.

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

입출력 예 

각 쿼리에 따라 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 합니다.

오늘도 문제 한번에 이해가 안되서 예시를 보았다 => 근데 예시만 보면 안되는 것이었다 .... 

 

queries : 

첫번째 i값은 0<=i<=4, k값 1

두번째 i값은 0<=i<=3, k값 2

세번째는 두번째와 동일 , k값 3

 

진짜 너무 너무 어려웠다..... 


*테스트케이스는 성공이지만 "제출 후 채점하기"하면 실패 

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
		int[] answer = Arrays.copyOf(arr, arr.length);
        //answer = Arrays.copyOf(arr, arr.length);
        
		for (int i = 0; i < queries.length; i++) {
			int start = queries[i][0];
			int end = queries[i][1];
			int multi = queries[i][2];
			
			for (int j = start; j <= end; j++) {

				if(arr[j]%multi==0){			
					answer[j]+=1;
				}
			}
		}	
		
		return answer;
	}
}

 

질문하기에서 아래 글을 보고 원인을 알았다 

(JAVA)문제가 이해안되시는분 : 인덱스가 k에 배수냐는거에요 arr[i]값이 아니라

 

 

*내가 해결한 코드 : 최종코드 *  : arr[j]가 아니라 주소값의 배수인 경우로 수정해줌 

import java.util.Arrays;

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
		int[] answer = Arrays.copyOf(arr, arr.length);
        
        //answer = Arrays.copyOf(arr, arr.length);
        //answer = arr; 하면 왜 안되는지 이해해야함 
        //+1해줄때 기본 배열 값까지 바뀐다, 복사가 아니라 둘이 같다고 선언
        
		for (int i = 0; i < queries.length; i++) {
			int start = queries[i][0];
			int end = queries[i][1];
			int multi = queries[i][2];
			
			for (int j = start; j <= end; j++) {
                 	// arr[j] 값이 아니라 주소값만 비교 
				if(j%multi==0){			
					answer[j]+=1;
				}
			}
		}	
		
		return answer;
	}
}

 

반응형