Home BOJ - 10814 - 나이순 정렬
Post
Cancel

BOJ - 10814 - 나이순 정렬

BOJ - 10814 - 나이순 정렬

문제


https://user-images.githubusercontent.com/71277820/161381138-c563d1cf-ee1d-4970-b470-691670072417.png

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

Reference & 다른 PS 모음집


C++ STL sort ( )

https://github.com/ggh-png/PS

This post is licensed under CC BY 4.0 by the author.