승1's B(log n)

[백준 - C++] 5635번: 생일 본문

Problem Solving

[백준 - C++] 5635번: 생일

승1이 2022. 8. 14. 23:29

이번 문제의 관건은 어떻게 년, 월, 일을 저장할 것이고 그것을 어떻게 비교할 것인가였던 것 같다. 

나는 이름을 저장하는 배열 따로, 연도 저장하는 배열 따로, 월 저장하는 배열 따로, 일 저장하는 배열을 따로 만들어서 먼저 연도를 비교하고, 그 다음에는 월을 비교하고, 그 다음에는 일을 비교하는 식으로 수직적인 구조로 구성해보았다.

그리고 맨 마지막에는 for문을 돌려서 가장 적은 나이를 가진 사람과 가장 많은 나이를 가진 사람을 따로따로 저장해서 출력해봤다.

#include <iostream>
using namespace std;

int main(){
    int n;
    cin >> n;
    string name[n];
    int date[n], month[n], year[n];
    for(int i = 0; i < n; i++)
    {
        cin >> name[i];
        cin >> date[i] >> month[i] >> year[i];
    }
    
    int max_Year = 0;
    int max_Month = 0;
    int max_Date = 0;
    string max_Name;
    for(int j = 0; j < n; j++)
    {
        if(max_Year < year[j])
        {
            max_Month = month[j];
            max_Date = date[j];
            max_Year = year[j];
            max_Name = name[j];
        }
        else if(max_Year == year[j])
        {
            if(max_Month < month[j])
            {
                max_Date = date[j];
                max_Month = month[j];
                max_Name = name[j];
            }
            else if(max_Month == month[j])
            {
                if(max_Date < date[j])
                {
                    max_Date = date[j];
                    max_Name = name[j];
                    
                }
            }
        }
    }
    
    int min_Year = 9000;
    int min_Month = 100;
    int min_Date = 32;
    string min_Name;
    for(int j = 0; j < n; j++)
    {
        if(min_Year > year[j])
        {
            min_Month = month[j];
            min_Date = date[j];
            min_Year = year[j];
            min_Name = name[j];
        }
        else if(min_Year == year[j])
        {
            if(min_Month > month[j])
            {
                min_Date = date[j];
                min_Month = month[j];
                min_Name = name[j];
            }
            else if(min_Month == month[j])
            {
                if(min_Date > date[j])
                {
                min_Date = date[j];
                min_Name = name[j];
                }
            }
        }
    }
    
    cout << max_Name << endl;
    cout << min_Name << endl;
    return 0;
}

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

 

5635번: 생일

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

www.acmicpc.net

 

Comments