프로그래머스 K 번째 수

최준호·2021년 7월 14일
0

algorithm

목록 보기
7/39

문제

배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하려 합니다.

예를 들어 array가 [1, 5, 2, 6, 3, 7, 4], i = 2, j = 5, k = 3이라면

array의 2번째부터 5번째까지 자르면 [5, 2, 6, 3]입니다.
1에서 나온 배열을 정렬하면 [2, 3, 5, 6]입니다.
2에서 나온 배열의 3번째 숫자는 5입니다.
배열 array, [i, j, k]를 원소로 가진 2차원 배열 commands가 매개변수로 주어질 때, commands의 모든 원소에 대해 앞서 설명한 연산을 적용했을 때 나온 결과를 배열에 담아 return 하도록 solution 함수를 작성해주세요.

제한사항

  • array의 길이는 1 이상 100 이하입니다.
  • array의 각 원소는 1 이상 100 이하입니다.
  • commands의 길이는 1 이상 50 이하입니다.
  • commands의 각 원소는 길이가 3입니다.

입출력 예

풀이

import java.util.Arrays;

public class KNumber {
    public static void main(String[] args) {
        KNumber kNumber = new KNumber();
        int[] array = {1, 5, 2, 6, 3, 7, 4};
        int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}};
        int[] solution = kNumber.solution(array, commands);
        for (int i : solution) {
            System.out.println("i = " + i);
        }
    }
    public int[] solution(int[] array, int[][] commands) {

        int[] answer = new int[commands.length];
        //commands는 입력된 array
        int idx = 0;
        for(int[] command : commands){
            int start = command[0];
            int end = command[1];
            int target = command[2];

            int[] newArray = new int[end-(start-1)];
            int j = 0;
            for(int i=start-1; i<end; i++){
                newArray[j++] = array[i];
            }

            //array 정렬
            Arrays.sort(newArray);
            answer[idx++] = newArray[target-1];
        }

        return answer;
    }
}

앞으로 정렬 문제는 sort도 좋지만 quick이나 merge의 개념을 파악하여 사용하는게 더 좋을거 같다. 여러 상황에 맞게 내가 수정해서 쓸수있게!

이번 문제에서는 Arrays.copyOfRange()를 사용하여 많이 풀었더라! 이것도 기억해두자

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글