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<int, string> b) {
if(a.first!=b.first) return a.first < b.first; //뒤를 나이더 큰 순으로,
return false;
}
int main() {
init();
int N;
vector<pair<int, string>> 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 |