n
: 반에 있는 학생의 수 (1 ≤ n ≤ 100)
name
: 학생의 이름 (1 ≤ name ≤ 15)
yyyy
: 태어난 연도 (1990 ≤ yyyy ≤ 2010)
mm
: 생일 월 (1 ≤ mm ≤ 12)
dd
: 생일 일 (1 ≤ dd ≤ 31)
✅ 입력 조건
1. 연, 월, 일은 0으로 시작하지 않는다.
2. 이름이 같거나 생일이 같은 사람은 없다.
✅ 출력 조건
1. 첫째 줄 : 가장 나이가 적은 사람의 이름 출력
2. 둘째 줄 : 가장 나이가 많은 사람의 이름 출력
날짜를 이용해 계산하는 문제이기 때문에 datetime
라이브러리를 사용하려고 한다.
먼저, 오늘 날짜를 datetime.today().date()
함수를 통해 '연-월-일'
형태로 저장한다.
today = datetime.today().date()
그 후, 학생의 이름과 생일을 입력받고 첫번째 공백 기준으로 이름
과 일 월 연도
를 구분하여 저장한다.
students = [input().strip().split(' ', 1) for _ in range(n)]
입력받은 일 월 연도
문자열을 strptime() 함수를 통해 날짜 객체로 만들어 리스트에 다시 저장한다.
for student in students:
student[1] = datetime.strptime(student[1], '%d %m %Y').date()
오늘 날짜 기준으로 각 학생의 나이를 일 단위로 계산해준다.
for student in students:
age = (today - student[1]).days
student.append(age)
for문으로 n번 반복 →
sort() 함수로 정렬 →
최종 시간복잡도
이므로 최악의 경우에도 1억번 이하로 연산 가능하다.
sort()
함수로 정렬
import sys
# 1. datetime 라이브러리의 datetime 모듈을 호출한다.
from datetime import datetime
input = sys.stdin.readline
# 2. 오늘 날짜를 변수에 저장한다.
today = datetime.today().date()
# 3. n을 입력받는다.
n = int(input())
# 4. n만큼 반복해서 이름과 생일을 입력받는다.
students = [input().strip().split(' ', 1) for _ in range(n)]
# 5. 입력받은 생일을 날짜 객체로 변경한다.
for student in students:
student[1] = datetime.strptime(student[1], '%d %m %Y').date()
# 6. 나이를 계산한다.
for student in students:
age = (today - student[1]).days
student.append(age)
# 7. 나이순으로 정렬한다.
students.sort(key=lambda x: x[2])
# 8. 원하는 형태로 출력한다.
print(students[0][0])
print(students[-1][0])
import sys
input = sys.stdin.readline
students = []
n = int(input())
for _ in range(n):
name, day, month, year = input().rstrip().split()
day, month, year = map(int, (day, month, year))
# 이 순서로 append 해서 year, month, day 순서로 정렬
students.append((year, month, day, name))
students.sort()
print(students[-1][3])
print(students[0][3])