본문 바로가기

Algorithm/자료구조

(C++) - 백준(BOJ) 5635번 : 생일

반응형

 

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

 

5635번: 생일

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

www.acmicpc.net

풀이방법

 <학생명, 일, 월, 년>의 자료를 가진 tuple형들을 vector에 담았습니다. 그 후 더 늦게 태어난 동생부터 형순으로 정렬한 뒤 v[0]번째 위치한 학생과 v[v.size() - 1]번째 위치한 학생의 이름을 각각 출력해줬습니다.

 

Code

#include <bits/stdc++.h>
using namespace std;
using tsiii = tuple <string, int, int, int>;
int n;
vector <tsiii> v;

bool cmp(tsiii &a, tsiii &b){
    int ad = get<1>(a);
    int am = get<2>(a);
    int ay = get<3>(a);

    int bd = get<1>(b);
    int bm = get<2>(b);
    int by = get<3>(b);

    if(ay == by){
        if(am == bm) return ad > bd;
        return am > bm;
    }
    return ay > by;
}

int main(){
    cin >> n;
    while(n--){
        string s;
        int day, month, year;
        cin >> s >> day >> month >> year;
        v.push_back({s,day,month,year});
    }
    sort(v.begin(),v.end(),cmp);
    tsiii young = v[0], old = v[v.size()-1];
    cout << get<0>(young) << '\n' << get<0>(old);
}