티스토리 뷰

https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net


해당 문제에서 일반 정렬(sort)를 사용하고 제출하면 통과되지 않습니다. 그 이유로는 나이가 같은 문자열들의 기존 순서를 보장해주지 않기 때문입니다. 

 

이때, stable_sort를 사용해야 합니다. 문제와 같이 동일한 값(나이)가 존재할 때 기존 순서를 유지가 필요할 때 사용됩니다.

#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <algorithm>

using namespace std;

bool comp(pair<int, string> p1, pair<int, string> p2) {
    return p1.first < p2.first;
}

int main() {
    int n;
    (cin >> n).ignore();

    vector<pair<int, string> > vector;
    for (int i = 0; i < n; i++) {
        string line;
        getline(cin, line);
        stringstream ss(line);
        int age;
        string name;
        ss >> age >> name;
        vector.push_back(make_pair(age, name));
    }

    stable_sort(vector.begin(), vector.end(), comp);

    for (int i = 0; i < n; i++) {
        cout << vector[i].first << ' ' << vector[i].second << '\n';
    }
}
Total
Today
Yesterday
최근에 올라온 글
«   2024/11   »
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