본문 바로가기

파이썬/알고리즘

백준 5635번 [Python] 문제풀이 (생일)

문제

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

 

 

입력

첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000)

 

 

출력

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

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

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

 

 

예제 입력 1
5
Mickey 1 10 1991
Alice 30 12 1990
Tom 15 8 1993
Jerry 18 9 1990
Garfield 20 9 1990

 

 

예제 출력 1
Tom
Jerry

 

 

알고리즘 분류

 

파이썬 코드(성공)
def best(x, bx, na, nb):
    if int(x) >= bx:
        bx = int(x)
        na = nb

bn, bd, bm, by = 0, 0, 0, 0
wn, wd, wm, wy = 0, 99, 99, 9999
for _ in range(int(input())):
    n, d, m, y = input().split()
    if int(y) > by or (int(y) == by and int(m) > bm) or (int(y) == by and int(m) == bm and int(d) > bd):
        by, bm, bd = int(y), int(m), int(d)
        bn = n
    if int(y) < wy or (int(y) == wy and int(m) < wm) or (int(y) == wy and int(m) == wm and int(d) < wd):
        wy, wm, wd = int(y), int(m), int(d)
        wn = n
print(bn)
print(wn)

구현하면서 더 좋은 방법이 있을 것 같은데

아시는 분 있다면 답글 바랍니다