[백준] 5635 생일 (C++)

문제 링크 : https://www.acmicpc.net/problem/5635

풀이 및 구현

이름 dd mm yyyy 형식으로 입력이 주어졌을 때 가장 나이가 적은 사람과 가장 나이가 많은 사람을 찾으면 되는 문제이다.

생일이 같거나, 이름이 같은 사람은 없으므로 단순하게 연도, 월, 일 순으로 정렬하면 된다.

간편하게 정렬하기 위해 tuple STL을 이용했다. tuple은 정렬을 할 때 제일 앞에 원소부터 정렬이 되기 때문에 tuple<int, int, int, string> 형식으로 선언하고 연도, 월, 일, 이름 순으로 저장해주었다.

1
2
3
4
5
6
7
vector<tuple<int, int, int, string>> v(N);

for (int i = 0; i < N; i++) {
string s; int d, m, y;
cin >> s >> d >> m >> y;
v[i] = {y, m, d, s};
}

이후 정렬을 하고 맨 뒤의 원소의 이름과 맨 앞의 원소의 이름을 출력하면 된다.

코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <bits/stdc++.h>
using namespace std;


int main() {
cin.tie(nullptr)->sync_with_stdio(false);

int N; cin >> N;
vector<tuple<int, int, int, string>> v(N);

for (int i = 0; i < N; i++) {
string s; int d, m, y;
cin >> s >> d >> m >> y;
v[i] = {y, m, d, s};
}

sort(v.begin(), v.end());
cout << get<3>(v.back()) << '\n' << get<3>(v.front());
}

후기

img.png

tuple을 사용하면 구조체를 정의하고, 연산자를 따로 오버로딩 할 필요 없어 간단한 문제였다.