์ค๋ฆ์ฐจ์ ์ ๋ ฌ ํ K๋ฒ์งธ ์์นํ ์๋ฅผ ์ถ๋ ฅํ๋ ๋ฌธ์ ์ด๋ค.
๊ฐ๋จํ๊ฒ qsort๋ก ์ ๋ ฌ ํ 0๋ฒ์งธ๋ถํฐ ์์ํ๋ฏ๋ก K-1 ์ธ๋ฑ์ค์ ์ซ์๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๊ฒ ๋ค๊ณ ์๊ฐํ๋๋ฐ, ๋ฐํ์ ์๋ฌ๊ฐ ๋ฐ์ํด์ ์ฐพ์๋ณด๋ Quick Selection Sort๋ฅผ ์ด์ฉํ์ฌ ์ข๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด์ผ ํด๊ฒฐํ ์ ์์์ ์ ์ ์์๋ค.
Quick Selection ์๊ณ ๋ฆฌ์ฆ์ ์์์ ์ซ์ ๋ฐฐ์ด์์ K๋ฒ์งธ๋ก ์๊ฑฐ๋ ํฐ ๊ฐ์ ์ฐพ์ ๋ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ชจ๋ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ๊ฒ์ด ์๋๋ผ partition ํจ์์ ๋ฆฌํด ๊ฐ๊ณผ K๋ฅผ ๋น๊ตํ์ฌ partition์ ๋๋์ง ๊ฒฐ์ ํ๋ ๋ฐฉ์์ผ๋ก K๋ฒ์งธ ์๋ฅผ ์ฐพ๋๋ค.
Quick Sort์ ๊ฒฝ์ฐ ํ๊ท O(nlogn), worst case์ O(n^2)์ด์ง๋ง, Quick Selection Sort๋ worst case์๋ ์๊ฐ๋ณต์ก๋๊ฐ O(n)์ด๋ค.
C++์์๋ nth_element๊ฐ Quick Selection ์๊ณ ๋ฆฌ์ฆ๊ณผ ๊ฐ์ด ๋์ํ๋ค๊ณ ํ์ฌ nth_element๋ก ์ ๋ ฌ ํ K-1 ์ธ๋ฑ์ค์ ์๋ฅผ ์ถ๋ ฅํ์ฌ ๋ฌธ์ ๋ฅผ ํ์๋ค.
#include <bits/stdc++.h>
using namespace std;
int main(){
int N, K;
scanf("%d %d", &N, &K);
deque<int> A;
for(int i=0; i<N; i++){
int num; scanf("%d", &num);
A.push_back(num);
}
//qsort(&A[0], A.size(), sizeof(int), compare);
nth_element(A.begin(), A.begin() + K -1, A.end());
//for(int i : A) cout << i << " ";
//cout << endl;
printf("%d", A[K-1]);
}
[๋ฐฑ์ค(BOJ)] 11652๋ฒ: ์นด๋ (์ ๋ ฌ, C++) (0) | 2021.08.06 |
---|---|
[๋ฐฑ์ค(BOJ)] 10989๋ฒ: ์ ์ ๋ ฌํ๊ธฐ 3 (์ ๋ ฌ, C++) (0) | 2021.08.06 |
[๋ฐฑ์ค(BOJ)] 10825๋ฒ: ๊ตญ์์ (์ ๋ ฌ, C++) (0) | 2021.03.10 |
[๋ฐฑ์ค(BOJ)] 10814๋ฒ: ๋์ด์ ์ ๋ ฌ (์ ๋ ฌ, C++) (0) | 2021.03.10 |
[๋ฐฑ์ค(BOJ)] 11650๋ฒ: ์ขํ ์ ๋ ฌํ๊ธฐ (์ ๋ ฌ, C++) (0) | 2021.03.10 |