728x90

 

문제설명

입력 & 출력

나의 풀이

import java.util.*;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];
        
        for(int i = 0 ; i < commands.length ; i++){
                int a = commands[i][0];
                int b = commands[i][1];
                int k = commands[i][2];
                
                //a-1 ~ b-1
                int[] arr = Arrays.copyOfRange(array,a-1,b);
                Arrays.sort(arr);
                answer[i] = arr[k-1];
        }
        return answer;
    }
}

 

이번 문제는 간단하게 2차원 배열의 요소를 입력으로 받아 각 배열 요소가 i, j, k 식으로 있을 때 array 배열의 요소i번째에서 j번째 까지 자르고, 자른 배열의 k번째 요소를 구하는 문제입니다.

 

  • 예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면
    • array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
    • 1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
    • 2에서 나온 배열의 3번째 숫자는 5입니다.

 

배열의 일부분을 복사해야 하기 때문에copyOfRange() 메서드를 사용했습니다.

 

먼저 commands의 길이만큼 배열은 초기화해줍니다. 그리고 i, j, k에 접근하기 위해서 commands를 순회하는 데 각 배열의 요소를 a, b, k 변수에 저장을 합니다.

 

그리고 copyOfRange() 메서드를 사용하여 array 배열을 복사하는 데 이때 a와 b를 지정하여 배열의 일부분을 복사해 줍니다.

 

문제에서 주어지는 commands 배열의 첫 번째 요소는 1부터 시작하기 때문에 a-1을 해줘야 합니다.

 

그리고 Arrays.sort() 메서드를 사용하여 복사한 배열을 오름차순으로 정렬해 주고, answer배열에 k번째 요소를 넣어줍니다. 물론 이 때도 k-1을 해줘야 합니다.

 

참고 ❗

 

 

[Java] copyOf(), arraycopy(), copyOfRange() 메서드 알아보기 ✔ (배열 복사 메서드)

Java를 다루다 보면 배열을 복사해야 하는 경우가 있습니다. 이를 위해 자바는 유용한 메서드 중 하나로 사용할 수 있는 메서드가 바로 copyOf(), arraycopy(), copyOfRange() 메서드입니다.  위 Arrays 클

pixx.tistory.com