본문 바로가기

코딩테스트

프로그래머스 코딩테스트 수열과 구간 쿼리1

아니... 코딩기초트레이닝이 왜이렇게 어려운거지? 코딩기초트레이닝 추천문제.. day6 중인데... '수열과 구간 쿼리3'가 너무 어려워서 못풀겠는데....바로 다음 문제가 수열과 구간쿼리2가 나오길래... 일부러 검색해서 '수열과 구간쿼리1'을 풀기 시작했다. 왠지 1이라고 되어 있으니까 쉬운거겠지 ? 하고... 근데 이것조차 어렵다.

 

코딩 기초 트레이닝..분명히 언어를 처음 접하는 이에게 추천하는 듯한 문구인데..

 

 

출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges

 

코딩테스트 연습 | 프로그래머스 스쿨

개발자 취업의 필수 관문 코딩테스트를 철저하게 연습하고 대비할 수 있는 문제를 총망라! 프로그래머스에서 선발한 문제로 유형을 파악하고 실력을 업그레이드해 보세요!

school.programmers.co.kr

 

문제 :  정수 배열 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 가 남아있다..

728x90
300x250