Written by JS970
on
on
10814 - 나이순 정렬
- 난이도: 실버 5
- 날짜: 2023년 2월 5일
- 상태: Correct
- 추가 검토 여부: Yes
solution
-
priority_queue를 사용하여 나이 순으로 정렬했다.
-
priority_queue에 들어가는 구조체인 info를 정의하였다.
-
나이가 같을 경우 먼저 등록한 순서대로 출력하므로 등록 순서를 나타내는 변수인 idx를 구조체에 추가시켰다.
-
priority_queue는 내림차순 정렬이 기본이고, 나이가 같을 경우 먼저 등록한 순서대로 출력하기 위해서는 cmp구조체를 만들어 활용해야 한다.
-
cmp구조체의 활용 및 구조체 생성자 문법에 대해 다시 되짚어 볼 필요가 있다.
-
cout에서 endl의 사용으로 인해 오답이 출력되었다.
-
아래의 두 구문을 main에 추가함으로써 printf, scanf를 사용하지 않고 cin, cout을 사용하면서 시간 초과를 막을 수 있다.
ios::sync_with_stdio(false); cin.tie(NULL);
code
#include <iostream>
#include <queue>
#include <utility>
using namespace std;
struct info
{
int age;
string name;
int idx;
info(int age, string name, int idx) : age(age), name(name), idx(idx) {}
};
struct cmp
{
bool operator()(info a, info b)
{
if(a.age == b.age) return a.idx > b.idx;
return a.age > b.age;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin >> N;
priority_queue<info, vector<info>, cmp> pq;
int age;
string name;
int idx = 0;
for(int i = 0; i < N; i++)
{
cin >> age;
cin >> name;
pq.push(info(age, name, idx++));
}
for(int i = 0; i < N; i++)
{
cout << pq.top().age << " " << pq.top().name << "\n";
pq.pop();
}
return 0;
}