문제
https://www.acmicpc.net/problem/10814
문제 요약
n명의 온라인 저지에 가입한 사람들의 나이와 이름이 순서대로 주어진다.
회원들의 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하여 출력한다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <tuple>
#include <string>
using namespace std;
int n;
vector<tuple<int, string, int>> arr;
// 정렬 조건을 정의하는 함수
bool compare(tuple<int, string, int> a, tuple<int, string, int> b) {
if (get<0>(a) == get<0>(b)){
return get<2>(a) < get<2>(b);
}
return get<0>(a) < get<0>(b);
}
int main() {
cin >> n;
// 정보 입력
for (int i = 0; i < n; i++) {
int age;
string name;
cin >> age >> name;
arr.push_back({ age, name, i });
}
// 정렬
sort(arr.begin(), arr.end(), compare);
// 정보 출력
for (int i = 0; i < n; i++) {
int age, idx;
string name;
tie(age, name, idx) = arr[i];
cout << age << " " << name << "\n";
}
return 0;
}
코드 설명
1. 온라인 저지에 가입한 사람들의 정보를 순서대로 입력 받는다.
=> 벡터를 이용한다.
각 요소의 구성: (나이, 이름, 순서)
2. 정렬을 위해 compare 함수를 정의한다.
- 첫 번째 요소(나이)가 같다면 세 번째 요소(순서)가 작은 요소가 앞에 정렬되도록 한다.
3. 정렬된 벡터를 출력한다.
고찰
bool compare()는 첫 번째 인자와 두 번째 인자를 비교한다.
1. true인 조건은 첫 번째 인자가 두 번째 인자보다 더 앞에 있다고 간주하는 상황이다.
2. false인 조건은 첫 번째 인자가 두 번째 인자보다 더 뒤에 있다고 간주하는 상황이다.
'Algorithm Problems > 정렬' 카테고리의 다른 글
[백준/C++] 11651번: 좌표 정렬하기 2 (0) | 2024.05.10 |
---|---|
[백준/C++] 10989번: 수 정렬하기 3 (0) | 2024.04.28 |
[백준/C++] 11650번: 좌표 정렬하기 (0) | 2024.04.14 |
[백준/Python] 1302번: 베스트셀러 (0) | 2023.10.09 |
[백준/python] 8979번: 올림픽 (0) | 2023.07.26 |