배운 것
구조체로도 풀 수 있고 stable sort로도 풀 수 있고
stable_sort
- 원래의 순서를 손상시키지 않으면서 정렬하는것
tuple 원소값 하나씩 가져오기
내코드 - stable sort 버전
#include <bits/stdc++.h>
using namespace std;
bool cmp(pair<int,string> a, pair<int,string> b)
{
return a.first<b.first;
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
vector<pair<int,string>> v;
for(int i=0;i<N;i++)
{
int age;
string name;
cin>>age>>name;
v.push_back({age,name});
}
stable_sort(v.begin(),v.end(),cmp);
for(int i = 0; i < num; i++)
cout << v[i].first << ' ' << v[i].second << '\n';
}
내코드 - tuple 버전
#include <bits/stdc++.h>
using namespace std;
bool cmp(tuple<int,int,string> a, tuple<int,int,string> b)
{
int aage=get<0>(a);
int bage=get<0>(b);
if(aage!=bage)return aage<bage;
int aidx=get<1>(a);
int bidx=get<1>(b);
return aidx<bidx;
}
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
vector<tuple<int, int, string>> members;
for (int i = 0; i < N; i++) {
int age;
string name;
cin >> age >> name;
members.push_back({age, i, name});
}
sort(members.begin(), members.end(),cmp);
for (auto [age, _, name] : members)
cout << age << " " << name << '\n';
}
정답 코드 - stable sort 버전
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
bool compare(pair<int,string> a, pair<int,string> b)
{
return a.first < b.first;
}
int main() {
int num;
cin >> num;
pair<int,string> tmp;
vector<pair<int,string>> arr;
for(int i = 0; i < num; i++)
{
cin >> tmp.first >> tmp.second;
arr.push_back(tmp);
}
stable_sort(arr.begin(),arr.end(),compare);
for(int i = 0; i < num; i++)
cout << arr[i].first << ' ' << arr[i].second << '\n';
}
정답코드 - tuple 버전
// Authored by : heheHwang
// Co-authored by : -
// http://boj.kr/039530fbae654100939d10d8a7c10bd7
#include <bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
vector<tuple<int, int, string>> members;
for (int i = 0; i < N; i++) {
int age;
string name;
cin >> age >> name;
members.push_back({age, i, name});
}
sort(members.begin(), members.end());
for (auto [age, _, name] : members)
cout << age << " " << name << '\n';
}
참고
[C++] tuple 사용법 & 예제 (tistory.com)
[백준] 10814 나이순 정렬 C++ (정렬) (velog.io)
[백준 / BOJ] - 10814번 나이순 정렬 C++ 풀이 :: Just Give Me The Code (tistory.com)
'Algorithm > C++' 카테고리의 다른 글
[백준 7795] 먹을 것인가 먹힐 것인가 (0) | 2022.10.04 |
---|---|
[백준 11656] 접미사 배열 (0) | 2022.10.04 |
[백준 1181] 단어 정렬 (0) | 2022.09.28 |
[백준 15663] N과 M(9) (0) | 2022.09.28 |
[백준 15657] N과 M (8) (0) | 2022.09.28 |
댓글