본문 바로가기
PS

백준 11004번 C++ K번째 수

by mtoc 2019. 6. 10.


K번째 수

https://www.acmicpc.net/problem/11004

수 N개 A1, A2, ..., AN이 주어진다. A를 오름차순 정렬했을 때, 앞에서부터 K번째 있는 수를 구하는 프로그램을 작성하시오.





문제는 간단해보였는데...

아마 이걸 푸는 사람들을 기다리는 건 시간초과일 것이다.

그냥 알고리즘 헤더에 있는 소트함수로 하면 될 것 같았는데 안 돼서 오늘 Min Heap으로 풀었다.

그랬더니 아슬아슬하게 통과.

radix sort를 이용하면 시간복잡도는 O(dn) (d: 데이터의 가장 큰 자리수, n: 데이터수)이라고 한다. 더 빠르게 풀 수 있을 듯

우선순위 큐 최고...

시간초과 참고는 여기





코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <queue>
using namespace std;
int main() {
    int N, K, temp;
    scanf("%d %d"&N, &K);
    priority_queue<intvector<int>, greater<>> pq;
    for(int i=0; i<N; i++) {
        scanf("%d"&temp);
        pq.push(temp);
    }
    while(K>1) {
        pq.pop();
        K--;
    }
    printf("%d", pq.top());
    return 0;
}
cs


'PS' 카테고리의 다른 글

백준 4963번 C++ 섬의 개수  (0) 2019.06.12
백준 1707번 C++ 이분 그래프  (0) 2019.06.12
백준 10824번 C++ 네 수  (0) 2019.06.07
백준 2225번 C++ 합분해  (0) 2019.06.02
백준 9461번 C++ 파도반 수열  (0) 2019.06.01

댓글