์ด ๋ฌธ์ ๋, BufferedReader ๋ก ์ ๋ ฅ ๋ฐ๊ณ , sort() ๋ฉ์๋๋ฅผ ์ฐ๋ฉด ํด๊ฒฐ๋๊ธด ํ์ง๋ง, ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ์ ํ ํน์ฑ์, ์ ๋ ฌ์ ๊ตฌํํ๊ฒ๋ ์ค๊ณํด๋จ์ ๊ฒ์ด๋ผ ์๊ฐ์ด ๋ค๊ธฐ๋ ํ๊ณ , ์๋๋ ๋๋ฆฐ ๊ฒ ๊ฐ์ ์ฐพ์๋ณด๋
Quick Sort ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํด์ ํธ๋ ์ฌ๋๋ค์ด ๋ง์๋ค.
double pivot quick sort ๋ผ๋ quick sort ์ ๋ค๋ฅธ ๋ฒ์ ๋ ์์์ง๋ง,
Quick sort ์์ฒด๋ฅผ ์ฒ์ ์ ํด๋ด์, ์ผ๋จ Quick Sort ๋ฅผ ๊ณต๋ถํด๋ณด๊ณ ์ฝ๋๋ฅผ ์์ฑํ์ฌ ์ ์ถํ์๋ค.
์ค๋ฆ์ฐจ์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํด๋ณด๊ฒ ๋ค.
๊ฐ๋จํ๊ฒ ์ค๋ช ํ๋ฉด, ๊ธฐ์ค ๊ฐ์ ํ๋ ์ ํ๊ณ , start index 0์์๋ถํฐ ๊ธฐ์ค๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๋ฐ๊ฒฌํ๊ณ , end index ๋์์๋ถํฐ ๊ธฐ์ค๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฐ์ ๋ฐ๊ฒฌํ ์, ๋์์ ์์น๋ฅผ ๊ตํํ๊ณ , start ์ธ๋ฑ์ค๋ +1 end ์ธ๋ฑ์ค๋ -1์ ํ๊ณ ,
start index์ end index๊ฐ ๋ง๋ ๋ ๊น์ง ๊ตํ์ ์ํํ๊ณ , ๋ฃจํ๊ฐ ๋๋ ๋ค start index์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณต๊ฐ์ ๋ถ๋ฆฌํ์ฌ ๋ ์์๊ฐ์ ๋ฃจํ๋ฅผ ๋ฐ๋ณตํ๋ฉด ์ต์ข ์ ์ผ๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์ด ๋์ค๊ฒ ๋๋ค.
[5] 3 8 (9) 2 4 {7}
( [ ] = ์์์ธ๋ฑ์ค ( ) = ๊ธฐ์ค๊ฐ { } = ๋ ์ธ๋ฑ์ค )
์์ ์ธ๋ฑ์ค 5, ๊ธฐ์ค๊ฐ 9 ๋ ์ธ๋ฑ์ค 7 ์ธ ๋ฐฐ์ด์ด ์์ ๋
5 3 8 [(9)] 2 4 {7}
์์ ์ธ๋ฑ์ค๋ ๊ธฐ์ค๊ฐ๊ณผ ๊ฐ์ด ๊ฐ์ 9์์ ๋ฉ์ถค, ๋ ์ธ๋ฑ์ค๋ ๊ธฐ์ค๊ฐ๋ณด๋ค ์์ 7์์ ๋ฉ์ถค, ๋ ์๋ฅผ ๊ตํ
๊ธฐ์ค ๊ฐ์ 7๋ก ๋ฐ๋ ๊ฒ์ด๋ค.
5 3 8 (7) 2 {4} [9]
์์ ์ธ๋ฑ์ค๋ 7๋ณด๋ค ๊ทธ๊ฑฐ๋ ๊ฐ์ ๊ฐ์ ๋ฐ๊ฒฌํ์ง ๋ชปํด ๊ฒฐ๊ตญ 9๊น์ง ์๊ณ , ๋ ์ธ๋ฑ์ค๋ 7๋ณด๋ค ์์ 4๋ฅผ ๋ฐ๊ฒฌํ์ง๋ง, ์ด๋ฏธ ์์ ์ธ๋ฑ์ค์ ๋ ์ธ๋ฑ์ค๊ฐ ๋ง๋ ๊ต์ฐจํ ๋ค ๋ฐ๊ฒฌํ์ผ๋ฏ๋ก ๊ตํ์ ์ํํ์ง ์์
์์ ์ธ๋ฑ์ค์ ์์น๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ณต๊ฐ์ ๋ถ๋ฆฌํ๋ค.
[5] 3 (8) 7 2 {4} || 9
9๋ ๊ฐ์ด 1๊ฐ์ด๋ฏ๋ก ์ ๋ ฌ์ ์ํํ ํ์๊ฐ ์๋ค.
5 3 [(8)] 7 2 {4} || 9
์ ๊ฒฝ์ฐ๋ ๊ธฐ์ค๊ฐ 8๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฐ์ ๋ฐ๊ฒฌํ์ง ๋ชปํด ์์ ์ธ๋ฑ์ค๊ฐ 8๊น์ง ๋๋ฌํ๊ณ ๋์ธ๋ฑ์ค๋ 4๊ฐ ๊ธฐ์ค๊ฐ 8๋ณด๋ค ์์ผ๋ฏ๋ก 4๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์๋ค. ๋ ์์น๋ฅผ ๊ตํํ๋ค.
5 3 (4) [7] {2} 8 || 9
์์ ์ธ๋ฑ์ค๋ ๊ธฐ์ค๊ฐ 4๋ณด๋ค ํฐ 7์ ๋ฐ๊ฒฌํ๊ณ , ๋ ์ธ๋ฑ์ค๋ ๊ธฐ์ค๊ฐ 4๋ณด๋ค ์์ 2๋ฅผ ๋ฐ๊ฒฌํ๋ค. ๋ํ ๋ ์ธ๋ฑ์ค๊ฐ ๋ง๋๊ธฐ ์ด์ ์ด๋ฏ๋ก ๊ตํ์ ์ํํ๋ค.
5 3 (4) {2} [7] 8 || 9
๋๋ฒ์งธ ๋ฃจํ๊ฐ ์ง๋๋ค์๋ ์์ ๊ฐ์ ํํ๊ฐ ๋๊ณ , ์์ ์ธ๋ฑ์ค์ ์์น์ธ 7์ ๊ธฐ์ค์ผ๋ก ๊ณต๊ฐ์ ๋ ๋ถ๋ฆฌํ๋ค.
[5] (3) 4 {2} || [(7)] {8} || 9
์์ ๊ฐ์ ๊ฒฝ์ฐ๋, ์ง๊ธ๊น์ง ์ฌ์ฉํ๋ ๋ฃจํ ๋ฉ์ปค๋์ฆ์ ์ ์ฉํ๋ฉด
์ฒซ๋ฒ์งธ ๊ณต๊ฐ์ ๊ฒฝ์ฐ ๊ธฐ์ค๊ฐ 3๋ณด๋ค ํฐ 5์ ๊ธฐ์ค๊ฐ 3๋ณด๋ค ์์ 2๋ฅผ ๊ตํํ๊ณ ๋๋ฉด, ์์์ธ๋ฑ์ค์ ๋ ์ธ๋ฑ์ค๋ 3์ผ๋ก ๋ชจ์ด๊ฒ ๋๋ค.
๋๋ฒ์งธ ๊ณต๊ฐ์ ๊ฒฝ์ฐ ์ญ์, ๊ธฐ์ค๊ฐ 7๋ก ์์์ธ๋ฑ์ค์ ๋ ์ธ๋ฑ์ค๊ฐ ๋ชจ์ด๊ฒ ๋๋ค.
2 {[(3)]} 4 5 || {[(7)]} 8 || 9
์ต์ข ๊ฒฐ๊ณผ๋ ์์ ๊ฐ์ ๊ฒ์ด๊ณ , ์ ๋ ฌ์ด ๋์ด์์์ ํ์ธํ ์ ์๋ค.
๋๋คํ ๋ฐฐ์ด๋ก, ํ๋ฒ ๋จ๊ณ๋ณ๋ก ๊ทธ๋ ค๋ณด๋ฉด ์ดํด๊ฐ ์ฌ์ธ ๊ฒ์ด๋ค.
์์ธํ ์๋ฆฌ๋ ์ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข๋ค.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] input1 = br.readLine().split(" ");
int N = Integer.valueOf(input1[0]);
int index = Integer.valueOf(input1[1]);
int[] arr = new int[N];
String[] input2 = br.readLine().split(" ");
for (int i = 0; i < input2.length; i++) {
arr[i] = Integer.valueOf(input2[i]);
}
quickSort(arr);
// System.out.println(Arrays.toString(arr));
System.out.println(arr[index-1]);
}
private static void quickSort(int[] array) {
quickSort(array, 0, array.length - 1);
}
private static void quickSort(int[] array, int start, int end) {
int eachPivotPoint = getAfterSwapPivotPoint(array, start, end);
if (start < eachPivotPoint - 1) {
quickSort(array, start, eachPivotPoint - 1);
}
if (end > eachPivotPoint) {
quickSort(array, eachPivotPoint, end);
}
}
private static int getAfterSwapPivotPoint(int[] array, int start, int end) {
int Pivot = array[(start + end) / 2];
while (start <= end) {
while (array[start] < Pivot) {
start++;
}
while (array[end] > Pivot) {
end--;
}
if (start <= end) {
swap(array, start, end);
start ++;
end--;
}
}
return start;
}
private static void swap(int[] array, int start, int end) {
int tmp = array[start];
array[start] = array[end];
array[end] = tmp;
}
}