PS/정렬 알고리즘[Sort]

백준 5635 생일(c++)

SeungbeomKim 2022. 7. 7. 21:47
반응형

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

 

5635번: 생일

어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.

www.acmicpc.net

<코드>

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

<풀이과정>

3쌍의 이상의 원소값을 저장하기 위해 tuple을 사용했다.

첫번째로 네 번째 원소(생년월일)을 비교하고 그 다음, 세 번째 원소(달)를 비교하고, 두 번째 원소(일)을 비교해서 더 큰 값(내림차순) 반환하는 함수(cmp)를 작성하였고, tuple에서 첫 번째 원소가 이름이므로 가장 나이가 적은 사람(년도가 높을수록 나이가 적다)의 성함과 가장 나이가 많은 사람을 출력한다.   

반응형

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

백준 20291 파일 정리(c++)  (0) 2022.07.12
백준 1374 강의실(c++)  (1) 2022.07.11
백준 10989 수 정렬하기 3(c++)  (1) 2022.07.07
백준 2075 N번째 큰 수  (1) 2022.07.07
백준 10867 중복 빼고 정렬하기(c++)  (0) 2022.07.06