프로그래머스 알고리즘 고득점 Kit 카테고리의 정렬 문제 중 레벨 1 K번째 수 문제를 풀이했다.
1단계 문제라 어려운 부분은 없었다. 로직 흐름은 아래와 같다.
문제 풀이 후 다른 사람의 풀이를 보니 나처럼 내부 반복문을 통해 해당 범위의 요소를 구하지 않고 Arrays.copyOfRange() 메소드를 통해 구하는 풀이를 많이 보았다.
이번 기회에 Arrays.copyOfRange() 메소드를 통해서 배열의 범위 요소들을 한번에 가져올 수 있다는 것을 알게 되었다!!
KthNumber.java
package com.example.Programmers.Lv1;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* 프로그래머스 Lv1 - K번째 수
* 정렬 문제
*/
public class KthNumber {
public int[] solution(int[] array, int[][] commands) {
List<Integer> answer = new ArrayList<>();
for (int a = 0; a < commands.length; a++) {
int i = commands[a][0];
int j = commands[a][1];
int k = commands[a][2];
int[] splited = new int[j - i + 1];
int cnt = 0;
for (int b = i - 1; b < j; b++) {
splited[cnt] = array[b];
cnt++;
}
Arrays.sort(splited);
answer.add(splited[k - 1]);
}
return answer.stream().mapToInt(Integer::intValue).toArray();
}
}
KthNumberTest.java
package com.example.Programmers.Lv1;
import static org.junit.Assert.assertArrayEquals;
import org.junit.Test;
public class KthNumberTest {
@Test
public void testKthNumber() {
KthNumber k = new KthNumber();
int[] result = k.solution(new int[] { 1, 5, 2, 6, 3, 7, 4 },
new int[][] { { 2, 5, 3 }, { 4, 4, 1 }, { 1, 7, 3 } });
int[] expected = new int[] { 5, 6, 3 };
assertArrayEquals(expected, result);
}
}