PS/정렬 알고리즘[Sort]

백준 10814 나이순 정렬(c++)

SeungbeomKim 2022. 7. 6. 20:31
반응형

https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

<코드>

#include <iostream>
#include <vector>
#include <functional>
#include <string>
#include <algorithm>
#include <tuple>
using namespace std;
bool com(tuple<int,string,int>&v1,tuple<int,string,int>&v2)
{
	if(get<0>(v1)==get<0>(v2)){
		return get<2>(v1)<get<2>(v2);
	}
	return get<0>(v1)<get<0>(v2);
}
int main()
{
	int n;
	vector<tuple<int,string,int>>v;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		int num;
		string str;
		cin>>num>>str;
		v.push_back(make_tuple(num,str,i));
	}
	sort(v.begin(),v.end(),com);
	for(int i=0;i<v.size();i++)
	{
		cout<<get<0>(v[i])<<' '<<get<1>(v[i])<<'\n';
	}
}

<풀이과정>

나이순 정렬 문제인데, 3쌍 값을 묶는 tuple을 사용하였다.

왜냐하면 나이가 같은 경우를 고려해야 하기 때문이다. 나이가 같다면 먼저 가입한 사람이 먼저 출력되어야 되기 때문에 입력 순서인 i를 tuple의 3번째 원소에 삽입할 수 있게 설정하였다. get<2>(v1)<get<2>(v2) 부분이 먼저 가입한 사람을 출력할 수 있게 해주는 부분이다(i를 기준으로 오름차순 정렬)

<참고>

pair<1번째 원소, 2번째 원소> => 헤더파일 #include <utility>

요소 => ex)v[i].first, v[i].second

tuple<1번째 원소, 2번째 원소, 3번째 원소> #include <tuple>

요소 => ex)get<0>(v[i]),get<1>(v[i]),get<2>(v[i])

반응형

'PS > 정렬 알고리즘[Sort]' 카테고리의 다른 글

백준 5635 생일(c++)  (0) 2022.07.07
백준 10989 수 정렬하기 3(c++)  (1) 2022.07.07
백준 2075 N번째 큰 수  (1) 2022.07.07
백준 10867 중복 빼고 정렬하기(c++)  (0) 2022.07.06
백준 1251 단어 나누기  (0) 2022.07.04