PS/정렬 알고리즘[Sort]

백준 2075 N번째 큰 수

SeungbeomKim 2022. 7. 7. 18:07

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

 

2075번: N번째 큰 수

첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다.

www.acmicpc.net

<틀린 코드>

#include <iostream>
#include <queue>
using namespace std;

int main()
{
	int n;
	cin>>n;
	priority_queue<int>pq;
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			int num;
			cin>>num;
			pq.push(num);
		}
	}
	int cnt=1;
	for(int i=0;i<n*n;i++)
	{
			if(cnt==n){
				break;
			}
			pq.pop();
			cnt++;
	}
	cout<<pq.top()<<'\n';
}

우선순위 큐에다가 입력받은 수를 push해주면 가장 큰 수대로 자동 정렬이 된다 . 가장 큰 수의 인덱스 cnt =1 을 주고, n 번째 수가 될 때 까지 pop해주면 될 줄 알았는데 메모리 초과가 뜬다.

<맞는 코드>

#include <vector>
#include <algorithm>
#include <iostream>
#include <functional>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	int n;
	cin>>n;
	vector<int>v(n*n);
	for(int i=0;i<n*n;i++)
	{
		cin>>v[i];
		
	}
	sort(v.begin(),v.end(),greater<int>());
	cout<<v[n-1]<<'\n';
}

<풀이 과정>

벡터 최대 메모리만큼의 크기를 할당해줘야 한다 v(n*n);

더불어 내림차순 정렬을 위해 greater<int> 사용과 함께 functional 헤더를 넣어주면 쉽게 풀 수 있다 !

위에 틀린 코드에 메모리 초과가 왜 뜨는지 아시는 분 조언 감사히 받겠습니다.

'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글

백준 5635 생일(c++)  (0) 2022.07.07
백준 10989 수 정렬하기 3(c++)  (1) 2022.07.07
백준 10867 중복 빼고 정렬하기(c++)  (0) 2022.07.06
백준 10814 나이순 정렬(c++)  (0) 2022.07.06
백준 1251 단어 나누기  (0) 2022.07.04