728x90
벡터를 가지고 sorting만 할 줄 알면 푸는 문제이다.
필자는 'paired vector'일 경우에는, 어차피 first를 가지고 정렬하기 때문에 다른 것 필요없이 sort함수를 그냥 갖다 쓰면 될줄 알았는데 그렇게 하니까 결과값이 이상하게 나온걸 깨달았음..
1. sort를 쓰면 안되고 stable sort를 사용해야 한다.
std::sort는 두 원소가 같을 때 기존의 순서를 유지해준다는 보장이 없는 unstable sort이다. 이 때문에 "나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다."가 지켜지지 않는다.
2. cmp 함수를 따로 만들어야 하는 필요성
pair::operator 자체가 first가 같으면 그 다음 second를 비교하기 때문에 {21,jun}과 {21,do}는 대소관계가 성립하는 서로 다른 값이다. 따라서 stable이든 아니든 같은 결과를 내게 된다.
pair에서 stable_sort를 통해 순서가 유지되려면 second까지 같아야 한다..
따라서 cmp라는 bool type 함수를 만들어서 해결.
first만 보고 second는 아예 안보게 해결하면 풀 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
vector<pair<int,string>> v;
bool cmp (pair<int, string> u, pair<int, string> v)
{
return u.first < v.first;
}
int main(void){
int n,age;
string name;
cin>>n;
for(int i=0; i<n; i++){
cin>>age>>name;
v.push_back(make_pair(age,name));
}
sort(v.begin(),v.end(),cmp);
for(int i=0; i<n; i++){
cout<<v[i].first<<" "<<v[i].second<<"\n";
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
'알고리즘 > 백준' 카테고리의 다른 글
백준 2580 - 스도쿠 ( 재밌는 dfs 문제) c++ (1) | 2020.02.11 |
---|---|
백준 2251 물통 - 세 쌍 벡터를 이용한 bfs (0) | 2020.02.10 |
백준 2251 물통 : bfs와 브루트포스 - c++ (0) | 2020.01.30 |
1525 퍼즐 - bfs와 브루트포스 - c++ (0) | 2020.01.30 |
백준 9019 DSLR : bfs 활용 브루트포스 탐색 c++ (0) | 2020.01.28 |