그 전에 boj 10814번 문제를 접했을때는 stable_sort()를 활용해서 먼저 입력되어 존재하는 원소와의 우선순위를 그대로 유지하는 방법으로 풀이를 접하게 되었고, 이번에 다시 풀어보았을때도 그런식으로 문제를 해결하였다.
그런데 새롭게 접한 풀이코드에서 stable_sort()를 활용하지 않고, tuple을 정의해서 입력을 받아들일때 새롭게 중간에
{age,i,name} 형태로 입력된 순서 i를 정의해서 vector에 넣은뒤에,
sort()를 통해서 정렬하는 풀이를 보게되었다.
이때에 sort의 정렬 순서가 첫번째로 나이별로, 두번째로 i에 해당하는 입력별로, 그리고 3번째가 이름별로 정렬될텐데,
입력 순서는 중복값이 없이 모두 for문에서 순차적으로 증가하면서 입력될것이기 때문에 기존의 순서를 그대로 유지한채로 정렬이 될것이다.
그래서 이 풀이법은 sort()를 그대로 활용한 입력순서 그대로 정렬하는 방법으로서 기억해두고 나중에 이 방법을 활용해볼 수 있을때 사용해보는것도 좋을것 같다.
그리고 이번 풀이를 통해서 c++17에 도입된 구조화된 바인딩 이라는 문법을 알게되었고 충분히 같이 엮어서 익숙해진뒤 다음에 활용할 수 있을것 같다.
// Authored by : heheHwang
// Co-authored by : -
// http://boj.kr/039530fbae654100939d10d8a7c10bd7
#include <bits/stdc++.h>
using namespace std;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
vector<tuple<int, int, string>> members;
for (int i = 0; i < N; i++) {
int age;
string name;
cin >> age >> name;
members.push_back({ age, i, name });
}
sort(members.begin(), members.end());
for (auto [age, _, name] : members)
cout << age << " " << name << '\n';
}
그리고 과거에 작성했던 코드에서 람다함수를 활용해서 인라인 함수로 cmp 함수를 넣을때, [&]로 시작하는 부분을 발견하였는데, 이에 대해서 알아보았을때,
검색해서 보니 람다함수에 사용하는 변수들을 &을 활용해서 참조방식으로 접근하겠다는걸 모두에 적용할때 활용하는것으로 보인다.
이 표현법은 일단 개별적으로 활용하는것에 익숙해진뒤 다음에 다시 [&]을 활용해서 전체적으로 참조방식으로 접근하는것을 이해하고 익숙해져 보도록 하자.