https://www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을
www.acmicpc.net
---------------------------------------------------핵심 알고리즘--------------------------------------------
안정 정렬(stable sort)
---------------------------------------------------풀이----------------------------------------------------
algorithm의 기본 sort()함수를 사용하면 틀린다.
나이순 정렬인데, 나이가 같으면 입력된 순서대로 정렬해야 하므로 stable_sort()를 사용해야 한다.
insertion, merge, bubble sort를 사용하면 마찬가지의 결과를 얻을 수 있다.
#define FASTIO ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
bool cmp(pair<int,string> a, pair<int,string> b){
return a.first < b.first;
};
// 나이가 증가하는 순으로 정렬
int main(void){
FASTIO;
int N;
cin >> N;
vector<pair<int,string> > v;
for(int i = 0; i < N; i++){
pair<int,string> p;
cin >> p.first >> p.second;
v.push_back(p);
}
stable_sort(v.begin(), v.end(), cmp);
for(int i = 0; i < v.size(); i++){
cout << v[i].first << " " << v[i].second << "\n";
}
return 0;
}
---------------------------------------------------후기----------------------------------------------------
처음에는 퀵소트를 사용하는 sort() 함수를 사용하거나 priority_queue를 사용해 틀린 결과를 얻었다.
아니면, 저장된 순서도 함께 저장해서 그에 맞춰 정렬하는 방법도 존재한다.
'알고리즘' 카테고리의 다른 글
[BOJ] 1966 프린터 큐 (0) | 2023.05.25 |
---|---|
[BOJ] 1929 소수 구하기 (2) | 2023.05.25 |
[BOJ] 2798 블랙잭 (0) | 2023.05.24 |
[BOJ] 2164 카드2 (0) | 2023.05.24 |
[BOJ] 1978 소수 찾기 (0) | 2023.05.24 |