[ ๋ฌธ์ ๋งํฌ ]
https://www.acmicpc.net/problem/10814
๐ฉ ์กฐ๊ฑด
- ์ฒซ์งธ ์ค์ ์จ๋ผ์ธ ์ ์ง ํ์์ ์ N์ด ์ฃผ์ด์ง (1 ≤ N ≤ 100,000)
- ๊ฐ N๊ฐ์ ์ค์ ํ์์ ๋์ด์ ์ด๋ฆ์ด ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง
- ํ์์ ๋์ด ์, ๋์ด๊ฐ ๊ฐ์ผ๋ฉด ๊ฐ์ ํ ์์ผ๋ก ์ ๋ ฌํ์ฌ ๋์ด์ ์ด๋ฆ์ ์ถ๋ ฅํด๋ผ
๐ฉ ์ ๊ทผ
3 -> vector<pair<๋์ด, ์ด๋ฆ>>์ ๋ง๋ค์ด์ sort ํจ์ ์ฌ์ฉํ์
๐ฉ ์ํ์ฐฉ์ค
vector<pair<๋์ด, ์ด๋ฆ>>์ sort ํจ์๋ฅผ ํตํด ์ ๋ ฌํ๋ฉด ๊ฐ์ ์์ผ๋ก ์ ๋ ฌ๋ ๊ฑฐ๋ ๋ณด์ฅ์ด ์๋ค. ๋ฐ๋ผ์ <๋์ด, ๊ฐ์ ์์, ์ด๋ฆ>์ ์ ์ฅํ๊ณ ์ ํ์๊ณ , ์์๊ฐ 3๊ฐ์ด๋ฏ๋ก tuple์ ์ฌ์ฉํด์ผ ํ๋ค.
#include <tuple>
vector<tuple<int, int, string>> v;
// ์๋ก์ด tuple์ ๋ง๋๋ ๊ฒ์ pair์ ์ ์ฌํจ
v.push_back(make_tuple(age, i, name));
// tuple ์์์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ
get<0>(v[i]); // ex) 21
get<1>(v[i]); // ex) 2
get<2>(v[i]); // ex) Yewon
๊ทธ๋ฆฌ๊ณ sort ํจ์์ ์ฌ์ฉํ ์๋ก์ด ์ฐ์ฐ์๋ฅผ ์ ์ํด์ค์ผ ํ๋ค. ๋ง์ฝ ์ฒซ๋ฒ์งธ ์์์ ๊ฐ์ด ๊ฐ์ผ๋ฉด ๋๋ฒ์งธ ์์์ ํฌ๊ธฐ์์ด ๊ณง ์์๊ฐ ๋๊ณ , ๊ทธ๊ฒ ์๋๋ผ๋ฉด ์ฒซ๋ฒ์งธ ์์์ ํฌ๊ธฐ์(์ค๋ฆ์ฐจ์)์ด ๊ณง ์์๊ฐ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ธ์์ ๋ ํผ๋ฐ์ค(&)๋ฅผ ๋ถ์ฌ์ฃผ๋ ๊ฒ์ด ๋ฐํ์ ์๋ฌ ๋ฐ์ ํ๋ฅ ์ ์ค์ธ๋ค.(๊ฐ ๋ณต์ฌํ์ง ์๊ณ ๋ฐ๋ก ์ฐธ์กฐ)
// ์ธ์์ ํ์
์ด vector<tuple<int, int, string>>๊ฐ ์๋๋ผ
// tuple<int, int, string>์์ ์ ์
bool cmp(const tuple<int, int, string> &t1, const tuple<int, int, string> &t2){
if(get<0>(t1)==get<0>(t2))
return get<1>(t1) < get<1>(t2);
return get<0>(t1) < get<0>(t2);
}
๐ป ์ฝ๋ (C++)
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <tuple>
using namespace std;
vector<tuple<int, int, string>> v;
bool cmp(const tuple<int, int, string> t1, const tuple<int, int, string> t2){
if(get<0>(t1)==get<0>(t2))
return get<1>(t1) < get<1>(t2);
return get<0>(t1) < get<0>(t2);
}
int main(){
int N;
cin >> N;
for(int i=0; i<N; i++){
int age; string name;
cin >> age >> name;
v.push_back(make_tuple(age, i, name));
}
sort(v.begin(), v.end(), cmp);
for(int i=0; i<N; i++){
cout << get<0>(v[i]) << " " << get<2>(v[i]) << "\n";
}
}
+ stable_sort
<algorithm> ํค๋ํ์ผ์ stable_sort ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋ ๊ฐ๋จํ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค.
stable_sort๋ ์ฐ์ ์์๊ฐ ๊ฐ์ ์์๋ค๋ผ๋ฆฌ๋ ์๋์ ์์๋ฅผ ๋ฐ๋ผ๊ฐ๋๋ก ํ๋ ์ ๋ ฌ์ด๋ค. ์ด ๋ ๋น๊ตํจ์๋ฅผ ๋ฐ๋์ ์ ์ํด์ผ stable_sort๊ฐ ์ ๋์ํ๋ค.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
vector<pair<int, string>> v;
bool cmp(const pair<int, string> p1, const pair<int, string> p2) {
return p1.first < p2.first;
}
int main() {
int N;
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(), cmp);
for (int i = 0; i < N; i++) {
cout << v[i].first << " " << v[i].second << "\n";
}
}
'๐ป Algorithms > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 11866 ์์ธํธ์ค ๋ฌธ์ 0 - ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2024.08.27 |
---|---|
[๋ฐฑ์ค] 1181 ๋จ์ด ์ ๋ ฌ - ์ ๋ ฌ (0) | 2024.08.25 |
[๋ฐฑ์ค] 5397 ํค๋ก๊ฑฐ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2024.08.24 |
[๋ฐฑ์ค] 1260 DFS์ BFS - dfs, bfs (0) | 2024.08.20 |
[๋ฐฑ์ค] 2164 ์นด๋2 - ํ (0) | 2024.08.19 |