1. 문제
프로그래머스 - K번째 수
- 배열 array의 i번째 숫자부터 j번째 숫자까지 자르고 정렬했을 때, k번째에 있는 수를 구하는 문제
2. 초기 풀이
- 배열을 특정 범위로 잘라내기 위해서 Arrays.copyOfRange()를, 정렬하기 위해서 Arrays.sort()를 사용하기로 결정
- commands의 길이는 1부터 50까지 가변적이기 때문에, ArrayList를 활용하여 결과를 구한 뒤 int형 배열로 변환하는 방식으로 문제 해결
import java.util.*;
class Solution {
public int[] solution(int[] array, int[][] commands) {
List<Integer> result = new ArrayList<>();
for (int i = 0; i < commands.length; i++) {
int start = commands[i][0];
int end = commands[i][1];
int k = commands[i][2];
int[] sliced = Arrays.copyOfRange(array, start - 1, end);
Arrays.sort(sliced);
result.add(sliced[k - 1]);
}
return result.stream()
.mapToInt(i -> i)
.toArray();
}
}
3. 개선 풀이
- commands의 길이와 result의 길이는 똑같기 때문에 별도의 ArrayList와 같은 자료구조를 사용하지 않고 바로 int[] 배열을 사용해 리턴하도록 개선
import java.util.Arrays;
class Solution {
public int[] solution(int[] array, int[][] commands) {
int[] result = new int[commands.length];
for (int i = 0; i < commands.length; i++) {
int start = commands[i][0];
int end = commands[i][1];
int k = commands[i][2];
int[] sliced = Arrays.copyOfRange(array, start - 1, end);
Arrays.sort(sliced);
result[i] = sliced[k - 1];
}
return result;
}
}