본문 바로가기
Etc/Algorithm

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

by 달의 조각 2022. 10. 11.
K번째수

 

 

문제 분석

  • 배열1과 2차원 배열인 배열2가 주어진다.
  • 배열1의 i번째부터 j번째까지 수를 정렬하여 k번째 수를 반환해야 한다.
    • 배열2는 [i, j, k]를 원소로 가진다.
    • 배열2의 길이는 고정되어 있지 않다.
  • 먼저 반환값으로 사용할 배열을 생성한다.
  • 배열2의 길이는 고정되어 있지 않으므로 length로 모든 요소를 순회하는 for문을 생성한다.
  • 배열1에서 자른 요소들을 담을 list를 생성하고 배열1의 ([i][0] - 1)번 인덱스부터 ([i][1] - 1)의 인덱스를 넣는다.
  • list를 정렬하고, get 메서드를 통해 k번째 요소를 뽑아서 반환값 담을 배열에 넣는다.

🤔

배열의 일부를 자르고 이를 담아 둘 곳이 필요하다는 점에서 한참 고민했다. 다른 효율적인 방법을 고민해 보기!

 

문제 풀기

import java.util.*;

class Solution {
    public int[] solution(int[] array, int[][] commands) {
        
        int[] result = new int[commands.length]; // 반환값으로 사용할 배열 생성
        // 2차원 배열 모두 순회
        for (int i = 0; i < commands.length; i++) {

            List<Integer> list = new ArrayList<>();
            
            // array의 commands[i][0]부터 commands[i][1]까지 수들을 list에 저장
            for (int j = commands[i][0]; j <= commands[i][1]; j++)
                list.add(array[j - 1]);

            Collections.sort(list);
            result[i] = list.get(commands[i][2] - 1); // 인덱스는 0부터 시작하므로 -1
        }

        return result;
    }
}

댓글