https://www.acmicpc.net/problem/10814
제출 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool comp(pair<string, pair<int, int>> &a, pair<string, pair<int, int>> &b)
{
if (a.second.first == b.second.first)
return a.second.second < b.second.second;
return a.second.first < b.second.first;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
vector<pair<string, pair<int, int>>> v;
for (int i = 0; i < n; i++)
{
string name;
int age;
cin >> age >> name;
v.push_back(make_pair(name, make_pair(age, i)));
}
sort(v.begin(), v.end(), comp);
for (auto res : v)
cout << res.second.first << " " << res.first << '\n';
}
이중으로 pair를 사용하여 이름, 나이, 가입한 순서 순으로 저장하여 정렬시켜주었다
vector에 pair를 삽입할 때에는 make_pair 함수를 사용해서 pair을 만든 후 push 해 주면 된다
pair을 두 번 사용했던 것은 입력받은 순서를 추가로 저장하기 위해서였는데, 더 찾아보니 굳이 그렇게 구현하지 않고도 안정 정렬(정렬을 했을 때 중복된 값들의 순서가 변하지 않는 경우)을 할 수가 있었다
stable_sort를 사용하여 정렬시키면 기존의 순서를 유지하면서 정렬을 시켜줄 수 있다
그럼 굳이 pair을 두 번 사용하지 않고도 문제를 해결 가능하다
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool comp(const pair<int, string> a, const pair<int, string> b)
{
return a.first < b.first;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
cin >> n;
pair<int, string> input;
vector<pair<int, string>> v;
for (int i = 0; i < n; i++)
{
cin >> input.first >> input.second;
v.push_back(input);
}
stable_sort(v.begin(), v.end(), comp);
for (auto res : v)
cout << res.first << " " << res.second << '\n';
}
그 외에도 cin 입력 받는 방식에도 변화를 주었다
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 1920] 수 찾기 (0) | 2025.01.07 |
---|---|
[C++][백준 1018] 체스판 다시 칠하기 (0) | 2025.01.07 |
[C++][백준 1181] 단어 정렬 (0) | 2025.01.05 |
[C++][백준 28702] FizzBuzz (0) | 2025.01.05 |
[C++][백준 10989] 수 정렬하기 3 (0) | 2025.01.05 |