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<int, vector<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 |
댓글