본문 바로가기
코딩테스트/programming_JAVA

[Java] 프로그래머스_42748 : K번째수

by prometedor 2023. 12. 15.

Arrays.copyOfRange 이용하기

K번째수 : Level1

 

https://school.programmers.co.kr/learn/courses/30/lessons/42748

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

풀이 코드

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

 

ㄴ Arrays.copyOfRange 를 이용하여 배열을 자르도록 하였다.

ㄴ Arrays.sort 를 이용해 배열을 정렬하였다.

 

Arrays.copyOfRange 이용하기

새로운 배열 = Arrays.copyOfRange(원본 배열, 배열 시작 인덱스, 배열 끝 인덱스)

 

ㄴ 배열 시작 인덱스는 포함되지만 배열 끝 인덱스는 포함되지 않는다.

ex) arr = Arrays.copyOfRange(array, 1, 5);   => arr = { 1, 2, 3, 4 }

 

 

다른 메서드 사용

System클래스의 arraycopy 메서드

ㄴ System 클래스에서 제공하는 arraycopy() 메소드를 활용하여 특정 위치부터 특정 개수만큼 새로운 배열에 값을 할당할 수 있다.

System.arraycopy(원본 배열, 원본 배열 시작 위치, 새로운 배열, 새로운 배열 시작 위치, 원본 배열에서 복사되는 데이터 개수);

 

 

 코드 예제 

int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int[] newArr = new int[4];

System.arraycopy(array, 1, newArr, 0, 4);

System.out.println("array: " + Arrays.toString(array));
System.out.println("newArr: " + Arrays.toString(newArr));

 

 실행 결과 

array: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
newArr: [1, 2, 3, 4]

 

 


 

 

Arryas.copyOfRange 메서드에 대해 정리해두고자 포스팅하였다.

System.arraycopy 메서드는 처음 알게되어 정리해보았다.