[백준 알고리즘] 11004번: K번째 수

11004번: K번째 수

문제
수 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];
}

Written by@전여훈 (Click Me!)
고민이 담긴 코드를 만들자, 고민하기 위해 공부하자.