코딩테스트

[프로그래머스]정렬_K번째수

찌서니 2022. 5. 9. 23:57

핵심 : copyOfRange(배열, 시작인덱스, 종료인덱스) / Arrays.sort(배열)

우선 문제 읽고 이해까지 가능했음!!! 그럼~

그 후 문제는 오랜만에 보는 2차원 배열,, 두둥!!

그리고 프로그래머스 틀이 익숙하지 않아서,, 기본으로 주어져있는걸 어떻게 시작하는지도 헷갈렸다ㅜ

(결국 인터넷 검색해서 이해하는걸 목표로)

 

 

import java.util.Arrays;
class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        
        for(int i=0; i<commands.length; i++) {
            int[] copyarr = Arrays.copyOfRange(array,commands[i][0]-1,commands[i][1]);
            Arrays.sort(copyarr);
            answer[i] = copyarr[commands[i][2]-1];
            System.out.println(answer[i]);
        }
        
        return answer;
    }
}

인터넷 찾아보는데 commands[i][0]-1 에서 도대체 -1을 왜 해주는건데...!!

이거때문에 헤맸는데 문제에 정답이 있었다.

copyOfRange(배열,시작인덱스,종료인덱스) 메소드는 시작인덱스는 포함하고, 종료인덱스는 포함하지 않는다.

 

문제를 보면 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고

즉, 1번을 보면 array[1, 5, 2, 6, 3, 7, 4]의 2번째(인덱스1)부터 5번째(인덱스4)까지 자르면 [5, 2, 6, 3]입니다.

그렇기 때문에 -1을 해줘야된다.

 

그후 자른 잘라서 복사한 배열을 Arrays.sort() 해주면 자동으로 오름차순 정렬된다.

 

마지막으로 copyarr[commands[i][2]-1] 에서도 -1을 해주는 이유는 문제에서 k번째에 있는 수(인덱스로는 k-1)이기 때문

'코딩테스트' 카테고리의 다른 글

프로그래머스_입양 시각 구하기(1)  (0) 2022.04.21