BOJ - 10814 - 나이순 정렬
문제
SOL
- 나이순으로 정렬 후 나이가 같으면 가입순으로 정렬
2중 pair를 사용하여 <가입번호(int), 나이(int), 이름(int)> 커스텀 자료형 생성
vector<pair<int, pair<int, string»> m_list;
compare를 사용하여 나이순 정렬 후 가입순 정렬
1 2 3 4 5 6 7
bool compare(pair<int, pair<int, string>> a, pair<int, pair<int, string>> b) { if(a.second.first == b.second.first) return a.first < b.first; return a.second.first < b.second.first; }
정답 소스
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
26
27
28
29
30
31
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
bool compare(pair<int, pair<int, string>> a,
pair<int, pair<int, string>> b)
{
if(a.second.first == b.second.first)
return a.first < b.first;
return a.second.first < b.second.first;
}
int main()
{
int num;
int old;
char name[101];
vector<pair<int, pair<int, string>>> m_list;
scanf("%d", &num);
for(int i=0; i < num; i++)
{
scanf("%d%s",&old ,name);
m_list.push_back(pair<int, pair<int, string>>(i, make_pair(old, name)));
}
sort(m_list.begin(), m_list.end(), compare);
for(int i=0; i < m_list.size(); i++)
printf("%d %s\n", m_list[i].second.first, m_list[i].second.second.c_str());
}
출력
1
2
3
4
5
6
7
8
3
21 Junkyu
21 Dohyun
20 Sunyoung
-----
20 Sunyoung
21 Junkyu
21 Dohyun