CodingTest/프로그래머스(Programmers)

[프로그래머스,Level 1] K번째 수(JAVA 구현)

뜸부깅 2020. 12. 30. 13:30
반응형

-첫 풀이 및 정답풀이

  이 문제 역시 체육복 문제와 비슷하게 그냥 문제에서 주어지는 조건만 잘 지켜준다면, 쉽게 풀 수 있는 문제였다. 그러나 필자의 풀이와 다르게 Arrays.copyOfRange() 메서드를 활용해 더욱 짧게 푼 사람들의 풀이 역시 존재하니까 많이 참고하는 게 좋을 것 같다.

(다른 사람의 풀이이므로 블로그에 직접 게시하지 않으니 문제에서 제공되는 링크에서 확인 바란다.)

 

import java.util.ArrayList;
import java.util.Arrays;

class Solution {
    public ArrayList<Integer> solution(int[] array, int[][] commands) {
        // 1. 정답을 담아 반환할 ArrayList.
        ArrayList<Integer> answer = new ArrayList<>();
        // 2. 특정 범위의 원소들을 저장할 배열 객체.
        int temp[];
        // 3. 명령어의 수 만큼 반복.
        for(int i = 0;i<commands.length;i++){
            // 3-1. 특정 범위의 원소들을 저장할 배열의 인덱스.
            int idx = 0;
            // 3-2. x번째부터 y번째 까지 원소 수의 크기 배열 생성.
            temp = new int[(commands[i][1] - commands[i][0])+1];
            // 3-3. array배열로부터 원소들을 저장.
            for(int j = (commands[i][0]-1); j<commands[i][1];j++){
                temp[idx] = array[j];
                idx++;
            }
            // 3-4. 저장된 배열을 정렬.
            Arrays.sort(temp);
            // 3-5. 정렬된 배열로부터 특정 원소를 ArrayList에 삽입.
            answer.add(temp[commands[i][2]-1]);
        }
        
        return answer;
    }
}