알고리즘/백준

[Python] 백준 5635번 - 생일

번잔중 2022. 4. 5. 15:44

 

 

5635번: 생일

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

www.acmicpc.net

 

문제

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

 

입력

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

 

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

 

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

 

출력

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

 

birth = []
n = int(input())
for _ in range(n):
    name, d, m, y = input().split()
    birth.append([name, int(d), int(m), int(y)])
birth.sort(key = lambda x: (x[3], x[2], [1]))

print(birth[-1][0])
print(birth[0][0])

이번엔 이름, 일, 월, 년을 입력받고 가장 나이가 어린사람을 출력한 뒤 가장 나이 많은 사람을 출력하는 문제였습니다. lambda를 사용해서 정렬을 해주었는데요. 년, 월, 일 순으로 오름차순 정렬을 해주었습니다. 그 이유는 나이가 많은 사람일수록 태어난 해의 수가 1990에 가까울 것이기 때문이고 나머지 월, 일도 마찬가지이기 때문입니다. 그래서 맨 앞에 있는 리스트가 노땅, 맨 뒤에 있는 리스트가 뉴비입니다.

 

피드백은 언제나 환영합니다.