https://www.acmicpc.net/problem/2075
<틀린 코드>
#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 |