코학다식

[백준/BOJ/C언어] 10814번 :: 나이순 정렬 본문

Algorithm/Problem

[백준/BOJ/C언어] 10814번 :: 나이순 정렬

copeng 2019. 9. 23. 18:59

문제 링크

 

 

Solution


 

정렬 함수인 sort()만 사용하면 쉽게 풀 수 있는 문제로 보이지만, 주의해야 할 것이 하나 있다. 나이가 같은 경우 먼저 가입한, 즉 먼저 입력받은 요소가 앞에 와야 한다는 것이다. 이를 위해 비교 함수(comp)를 바꿔 줄 수도 있지만, sort()와 같이 정렬 함수 중 하나인 stable_sort()를 사용하면 간편하게 풀 수 있다. stable_sort()sort()와 같이 정렬을 수행한다는 것은 같지만 값이 같은 경우에는 원래의 순서를 그대로 유지한다. sort()의 경우 입력받은 데이터의 크기가 작으면 값이 같은 경우에 따로 처리를 해 주지 않아도 순서가 유지되는 것처럼 보이나, 데이터가 커지면 랜덤하게 바뀔 수 있다.

 

 

 

code


 

#include <cstdio>
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;


struct baekjoon {
    int age;
    string name;
};

baekjoon member[100001];

bool comp(baekjoon a, baekjoon b) {
    return a.age < b.age;
}
int main() {
    int N;
    cin >> N;
    for (int i = 0; i < N; i++) {
        cin >> member[i].age >> member[i].name;
    }

    stable_sort(member, member + N, comp);
    for (int i = 0; i < N; i++)
        cout << member[i].age << " " <<member[i].name << "\n";

    return 0;
}
Comments