May 05, 2020
문제
수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 5,000,000)과 K (1 ≤ K ≤ N)이 주어진다.
둘째에는 A1, A2, ..., AN이 주어진다. (-109 ≤ Ai ≤ 109)
출력
A를 정렬했을 때, 앞에서부터 K번째 있는 수를 출력한다c++에서 지원하는 nth_element 합수를 통해 해결했다. 이 함수는 quick selection이라는 알고리즘을 사용하는데, 퀵소트와 셀렉션 소트 알고리즘의 컨셉을 합쳐서 만든 알고리즘이다. 따로 공부가 필요해 보인다.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main (){
ios_base::sync_with_stdio(0);
cin.tie(0);
int A, N;
cin >> A >> N;
vector<int> v;
while(A--){
int n;
cin >> n;
v.push_back(n);
}
nth_element(v.begin(), v.begin()+N-1, v.end());
cout << v[N-1];
}