Patrick's Devlog

[BOJ/C++] 생일(5635번) 본문

Algorithm/Algorithms Practice

[BOJ/C++] 생일(5635번)

Patrick_ 2022. 10. 3. 18:55

1. 개요

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

 

5635번: 생일

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

www.acmicpc.net

1-1. 설명

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

1-2. 제한 사항

 - 첫 줄에 학생 수 n이 주어지며, n은 1 이상 100 이하

 - n개 줄에는 각 학생 이름과 생일이 "이름 dd mm yyyy"형식으로 주어짐

 - yyyy는 1990 이상 2010 이하, mm은 1 이상 12 이하, dd는 1 이상 31 이하

 - 이름이 같거나 생일이 같은 사람은 없음


2. 구현

2-1. 풀이

입력을 받아 단순히 연도, 월, 일을 차례대로 비교하여 나이가 많은 사람과 적은 사람의 이름을 저장하였다. 

2-2. 코드

#include <iostream>
#include <algorithm>
using namespace std;


int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    
    int num;
    cin >> num;
    int max[3], min[3], current[3]; // {day, month, year}
    string maxName, minName, currentName;

    for (int i = 0; i < num; i++) {
        cin >> currentName >> current[0] >> current[1] >> current[2];
        if (i == 0) {
            maxName = minName = currentName;
            copy(current, current + 3, max);
            copy(current, current + 3, min);
;       }
        else {
            if (current[2] < max[2] || (current[2] <= max[2] && current[1] < max[1]) || (current[0] < max[0] && current[1] <= max[1] && current[2] <= max[2])) {
                copy(current, current + 3, max);
                maxName = currentName;
            }
            else if (current[2] > min[2] || (current[2] >= min[2] && current[1] > min[1]) || (current[0] > min[0] && current[1] >= min[1] && current[2] >= min[2])) {
                copy(current, current + 3, min);
                minName = currentName;
            }
        }
    }
    cout << minName << "\n" << maxName;
    return 0;
}