문제
풀이
int n;
cin>>n;
vector<tuple<int,int,string>> v; //나이, 가입번수, 이름
for(int i=0; i<n; i++)
{
int age;
string name;
cin>>age>>name;
tuple<int,int,string> t=make_tuple(age,i,name);
v.push_back(t);
}
회원수 n을 입력받습니다.
나이, 가입순서, 이름 을 저장하기위해서 tuple을 사용했습니다. (#include <tuple> 필요)
tuple을 사용한다면 한번에 2개 이상의 변수를 묶어서 사용이 가능합니다.
sort(v.begin(),v.end());
sort함수를 사용해서 정렬해줍니다.
이때 tuple을 썼기 때문에 매우 편하게 정렬이됩니다.
tuple을 저장할때
첫 번째에 나이,
두 번째에 가입번수,
세 번째에 이름
을 저장했기 때문에, sort함수를 쓰면 자동으로
우선적으로 나이를 기준으로,(오름차순)
나이가 같다면 가입번수를 기준으로,(오름차순)
나이와 가입번수도 같다면 이름을 기준으로(사전순) 정렬해주는데
가입번수가 다 다르기때문에 문제에서 요구하는 바와 똑같이 정렬이 됩니다!
for(int i=0; i<n; i++)
{
cout<<get<0>(v[i])<<" "<<get<2>(v[i])<<"\n";
}
이제 벡터변수에 저장된 각 사람들의 나이, 이름을 출력해주면 끝나게 됩니다.
get<인덱스>(튜플변수) 의 방법으로 튜플에 저장된 값을 얻을 수 있습니다.
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<tuple>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n;
cin>>n;
vector<tuple<int,int,string>> v; //나이, 가입번수, 이름
for(int i=0; i<n; i++)
{
int age;
string name;
cin>>age>>name;
tuple<int,int,string> t=make_tuple(age,i,name);
v.push_back(t);
}
sort(v.begin(),v.end());
for(int i=0; i<n; i++)
{
cout<<get<0>(v[i])<<" "<<get<2>(v[i])<<"\n";
}
}
최종코드입니다.
'알고리즘 > 백준 문제풀이' 카테고리의 다른 글
[C++] 백준-직사각형에서 탈출(1085번) (0) | 2022.08.29 |
---|---|
[C++] 백준-좌표 압축(18870번) (0) | 2022.08.28 |
[C++] 백준-단어 정렬(1181번) (0) | 2022.08.22 |
백준-좌표 정렬하기(11650번) (0) | 2022.08.21 |
백준-소트인사이드(1427번) (0) | 2022.08.20 |