Language/JAVA

[프로그래머스] K번째수 #Arrays.copyOfRange

paran21 2022. 7. 1. 22:08

https://programmers.co.kr/learn/courses/30/lessons/42748?language=java 

주어진 조건에 따라 배열에서 원하는 값을 찾아서, 배열로 출력하는 문제이다.

 

int배열을 주어진 범위를 index로 잘라서 복사하는 메서드를 새로 알게 되었다.

java.util.Arrays에 있는 메서드이다.

배열이기 때문에 from과 to가 배열의 범위를 벗어나면 에러가 발생한다.

public static int[] copyOfRange(int[] original, int from, int to) {
    int newLength = to - from;
    if (newLength < 0)
        throw new IllegalArgumentException(from + " > " + to);
    int[] copy = new int[newLength];
    System.arraycopy(original, from, copy, 0,
                     Math.min(original.length - from, newLength));
    return copy;
}

from을 포함하여 시작하고, to 이전 값에서 끝난다.

@Test
void copyOfRangeTest() {
    int[] array = {1, 2, 3, 4, 5, 6, 7};
    // {1, 2, 3, 4}
    int[] copyArray = Arrays.copyOfRange(array, 0, 4);
    Assertions.assertThat(copyArray[0]).isEqualTo(1);
    Assertions.assertThat(copyArray[copyArray.length - 1]).isEqualTo(4);
}

 

답안은 다음과 같다.

index에러가 발생했었는데, 디버깅을 하면서 수정할 수 있었다.

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[] newArray = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
            Arrays.sort(newArray);
            answer[i] = newArray[commands[i][2] - 1];
        }
        return answer;
    }
}

 

오랜만에 자바로 알고리즘을 풀었는데 이전과 다른 점이라면,

- 디버깅이 조금 더 편해졌고

- 새롭게 사용한 api 코드를 직접 살펴보고, 테스트코드를 통해 사용방법을 다시 살펴볼 수 있게 되었다!