본문 바로가기

Problem Solving/[Java] Programmers

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

개요

  • 배열 array의 i번째 숫자부터 j번째 숫자까지 정렬했을 때, k번째에 있는 수를  구하라

 

<조건>

  • 알 수 없음

 

<입력>

  • int[] array: 숫자를 원소로 가지는 배열
    • 길이: 1 ~ 100, 10^2
    • 각 원소의 값: 1 ~ 100, 10^2
  • int[][] commands: [i,j,k]를 원소로 가진 2차원 배열 
    • 길이: 1 ~ 50, 10^1

 

<반환>

  • commands의 모든 원소에 대해 연산을 적용했을 때 나온 결과를 배열에 담아 return하라.

 

 

 

문제 풀이

단순히 Array를 i부터 j까지 자른 뒤에, 정렬하고, k번째 위치를 구하면 되는 문제였습니다.

이때 주의할 점은 문제는 인덱스를 1부터 시작한다는 겁니다.

 

핵심 메서드는 다음과 같습니다.

int[] arr = Arrays.copyOfRange(array, front, end);
Arrays.sort(arr);

 

 

Arrays.copyOfRange(original, int from, int to)

from부터  to전까지 배열을 복사합니다.

보시다시피 다양한 자료형에 오버로딩이 되어있어 자료형에 상관없이 사용 가능합니다.

 

 

Arrays.sort()는 기본은 오름차순 정렬을 진행하고,

Comparator를 인자로 넣으면 정렬 기준을 변경 가능합니다.

특정 범위만 정렬하는 것도 물론 가능합니다.

 

 

 

 

전체 코드

import java.util.*;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        
        List<Integer> list = new ArrayList<>();
        
        for(int[] command: commands){
            int front = command[0]-1;
            int end = command[1];
            int pos = command[2]-1;
            
            int[] arr = Arrays.copyOfRange(array, front, end);
            Arrays.sort(arr);
            list.add(arr[pos]);
        }
        
        int[] answer = new int[list.size()];
        for(int i = 0; i < list.size(); i++){
            answer[i] = list.get(i);
        }
        return answer;
    }
}

 

 

 

 

배운 점

java.util.Arrays의 메서드

copyOfRange()와 sort()에 대해 배울 수 있는 문제였습니다.

 

 

 

Reference

https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Arrays.html