본문 바로가기
Develop/백준 (Cpp)

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

by Tarra 2023. 1. 20.

5635번 : 생일


문제 )

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

 

 

입력 :

첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)

다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다. 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.

이름이 같거나, 생일이 같은 사람은 없다.

 

 

 

출력 :

첫째 줄에 가장 나이가 적은 사람의 이름, 둘째 줄에 가장 나이가 많은 사람 이름을 출력한다.

 

 

 

 

풀이)

struct를 이용해서 풀고 싶었는데, 이름의 길이가 가변적이어서 

 

잘 안되어 어쩔 수 없이 일일이 비교하는 식으로 구현했다.

 

다른 사람들 코드를 보니 sort에 비교하는 함수를 더해 구현을 해놨더라.

 

sort함수에 대해 공부해야겠다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <string>
using namespace std;
 
int main()
{
    int n;
    cin >> n;
 
    string o_name;
    int o_day, o_month, o_year;
 
    cin >> o_name >> o_day >> o_month >> o_year;
 
    string y_name = o_name;
    int y_day = o_day, y_month = o_month, y_year = o_year;
 
      
 
    for (int i = 0; i < n - 1; i++) {
        string c_name;
        int c_day, c_month, c_year;
 
        cin >> c_name >> c_day >> c_month >> c_year;
 
        // old
        if (o_year < c_year) {
            o_year = c_year;
            o_month = c_month;
            o_day = c_day;
            o_name = c_name;
        }
        else if (o_year == c_year) {
            if (o_month < c_month) {
                o_year = c_year;
                o_month = c_month;
                o_day = c_day;
                o_name = c_name;
            }
            else if (o_month == c_month) {
                if (o_day < c_day) {
                    o_year = c_year;
                    o_month = c_month;
                    o_day = c_day;
                    o_name = c_name;
                }
            }
        } 
 
        // youth
        if (y_year > c_year) {
            y_year = c_year;
            y_month = c_month;
            y_day = c_day;
            y_name = c_name;
        }
        else if (y_year == c_year) {
            if (y_month > c_month) {
                y_year = c_year;
                y_month = c_month;
                y_day = c_day;
                y_name = c_name;
            }
            else if (y_month == c_month) {
                if (y_day > c_day) {
                    y_year = c_year;
                    y_month = c_month;
                    y_day = c_day;
                    y_name = c_name;
                }
            }
        }
    }
    cout << o_name << "\n" << y_name;
    return 0;
 
}
 
cs

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

 

5635번: 생일

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

www.acmicpc.net