본문 바로가기

Programmers

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

📌 문제

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

 

코딩테스트 연습 - K번째수

[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]

programmers.co.kr

 

📌 풀이

  • 2차원 배열에 있는 commands 변수 길이만큼 리턴할 answer 변수에 길이 지정
  • 문자열을 자를 때 subString 메서드처럼 배열을 구간별로 잘라서 가지고 오고 싶어서 검색해 보았더니 Arrays.copyOfRange() 메서드가 있었고 이를 활용하여 풀었다.
copyOfRange(array, fromIndex, toIndex)
- 전달받은 배열의 지정된 범위에 해당하는 요소만을 새로운 배열로 복사하여 반환해주는 메서드이다.
- 매개변수로 복사할 원본 배열(array), 원본 배열에서 복사할 범위의 시작 인덱스(fromIndex), 원본 배열에서 복사할 범위의 끝 인덱스(toIndex)

 

📌 코드

package programmers;

import java.util.Arrays;

public class Pro_220603 {   // K번째 수
    public static void main(String[] args) {
        int[] array = {1, 5, 2, 6, 3, 7, 4};
        int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}};

        System.out.println(Arrays.toString(solution(array, commands)));

    }

    public static int[] solution(int[] array, int[][] commands) {
        int[] answer = new int[commands.length];

        for (int i = 0; i < answer.length; i++) {
            int[] tempArr = Arrays.copyOfRange(array, commands[i][0] - 1, commands[i][1]);
            Arrays.sort(tempArr);
            answer[i] = tempArr[commands[i][2] - 1];
        }
        return answer;
    }
    
}