본문 바로가기
백준(C++)/정렬

[BOJ/C++]10814번_나이순 정렬

by 코잼민 2024. 7. 11.

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

 

##문제 풀기 전 내가 알고 있었어야 할 개념:

1_ Sort() 매소드의 람다식 메소드인 Compare 사용 연습 :

조건 :

  •  회원을 나이 순(오름차순) => if(첫번째.age != 두번째.age ) return 첫번째.age < 두번째.age 

조건 걸린 것을 같지 않다면으료 if 걸고, 다음것을 높은 값으로 배치하는 것을 true가 되겠끔 작성

  • 나이가 같으면 가입한 순 (==입력된 순) => ,조건이 걸리지 않았다는 것과 같다. 

return false;

2_ stable_sort() sort()의 차이 :

2_1) stable_sort  :

일반적으로 **합병소트(Merge Sort)**를 사용합니다.

합병소트는 기본적으로 정렬 안정성을 보장하는 알고리즘입니다. (즉 , 순서유지할 때, 보장 유지)

예: 학생들의 성적을 정렬하되, 성적이 같은 경우 입학 순서대로 정렬할 때.

2_2) sort :

일반적으로 퀵소트(Quick Sort), 힙소트(Heap Sort), 합병소트(Merge Sort) 등의 알고리즘을 사용할 수 있습니다.

성능이 가장 중요할 때 사용

예: 성능이 중요한 대규모 데이터 처리.

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
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
void init() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
}
 
bool compare(pair<int,string> a, pair<intstring> b) {
    if(a.first!=b.first) return a.first < b.first; //뒤를 나이더 큰 순으로,
    return false;
}
 
int main() {
 
    init();
 
    int N;
    vector<pair<intstring>> V;
 
    cin >> N;
 
    for (int i = 0; i < N; i++) {
        int age;
        string name;
        cin >> age >> name;
        V.push_back(make_pair(age, name));
    }
 
    stable_sort(V.begin(), V.end(), compare);
 
    for (int i = 0; i < N; i++) {
        cout << V[i].first << ' ' << V[i].second << '\n';
    }
 
    return 0;
}
 
cs

'백준(C++) > 정렬' 카테고리의 다른 글

[BOJ/C++]18870번_좌표 압축  (0) 2024.07.11
[BOJ/C++]1181번_단어 정렬  (0) 2024.07.10
[BOJ/C++]11651번_좌표 정렬하기2  (0) 2024.07.10
[BOJ/C++]10989번_수정렬하기3  (0) 2024.07.10
[BOJ/C++]25305번_커트라인  (0) 2024.07.10