해결방법
문제의 핵심은 나이를 어떻게 비교하고, 그 나이와 이름을 어떻게 매칭하는가이다.
나의 경우에는 나이와 이름을 구조체를 이용하여 매치시켰다.
나이를 정렬하는 방법은 sort()메서드를 이용하였다. sort() 메서드는 시작점, 끝점, 비교함수를 매개변수로 이용한다.
이 코드에서는 비교함수로
[=](const student& a, const student& b)
{
if (a.yyyy == b.yyyy)
{
if (a.mm != b.mm)
return a.mm > b.mm;
else
return a.dd > b.dd;
}
return a.yyyy > b.yyyy;
});
가 사용되었다. 한번 자세히 알아보자.
값의 비교를 위해 사용하는 람다함수의 매개변수는 a와 b이다.
만약 a와 b가 같은 해에 태어났다면, 다시 또 월을 비교하고, 월이 다르다면 월이 더 큰 사람이 앞으로 가게 된다.
만약 월도 같다면 일이 더 큰사람이 앞으로 가게 된다.
당연하지만, 연도가 다르다면 연도가 더 큰 사람이 어린 사람이 된다.
그 다음은 정렬된 구조체 배열의 맨 첫번째와 맨 마지막 이름을 출력하면 끝이다.
정답 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct student
{
string name;
int dd, mm, yyyy;
};
int main()
{
int n;
cin >> n;
vector<student> num(n);
for (int i = 0; i < n; i++)
{
cin >> num[i].name >> num[i].dd >> num[i].mm >> num[i].yyyy;
}
sort(num.begin(), num.end(), [=](const student& a, const student& b)
{
if (a.yyyy == b.yyyy)
{
if (a.mm != b.mm)
return a.mm > b.mm;
else
return a.dd > b.dd;
}
return a.yyyy > b.yyyy;
});
std::cout << num[0].name << endl << num[n - 1].name << endl;
return 0;
}
'코딩테스트' 카테고리의 다른 글
BOJ - 팰린드롬수 1259 (0) | 2024.12.04 |
---|---|
BOJ - 단어 정렬 1181 (0) | 2024.12.04 |
BOJ - 자작나무가 없소~ 31496 (1) | 2024.11.29 |
BOJ - 행렬 곱셈 2740 (0) | 2024.11.25 |
BOJ - 연도 진행바 1340 (0) | 2024.11.23 |