[문제 링크] 👉https://www.acmicpc.net/problem/5635
Solution
sol.1 (date 함수 사용)
from datetime import date
n = int(input()) # 학생의 수
students = [input().split() for _ in range(n)]
# 초기화된 생일 변수
youngest_date, oldest_date = date(1990, 1, 1), date(2010, 12, 31)
youngest_name, oldest_name = "", ""
# 학생들의 생일 비교
for name, day, month, year in students:
birth_date = date(int(year), int(month), int(day))
if birth_date > youngest_date:
youngest_date = birth_date
youngest_name = name
if birth_date < oldest_date:
oldest_date = birth_date
oldest_name = name
print(youngest_name)
print(oldest_name)
sol.2 (lambda, sort 함수 사용)
n = int(input()) # 학생 수
students = []
# 학생 정보 입력받기
for _ in range(n):
name, day, month, year = input().split()
students.append((name, int(year), int(month), int(day)))
# 생일을 기준으로 정렬: 연도 -> 월 -> 일 순
students.sort(key=lambda x: (x[1], x[2], x[3]))
# 가장 나이가 적은 사람은 마지막에, 많은 사람은 처음에 위치
print(students[-1][0]) # 가장 나이가 적은 사람
print(students[0][0]) # 가장 나이가 많은 사람
sol.3 (sort 함수 사용)
n = int(input()) # 학생의 수
result = []
for i in range(n):
name, day, month, year = input().split()
day, month, year = map(int, (day, month, year)) # int 형으로 변환
result.append((year, month, day, name))
result.sort()
print(result[-1][3])
print(result[0][3])
- list.sort()나 sorted()를 사용할 때는 기본적으로 각 튜플의 첫 번째 요소부터 차례대로 비교하여 정렬한다.
- 즉, 다차원 요소가 들어 있는 리스트에서 정렬 기준이 명시되지 않으면 튜플의 첫 번째 요소부터 비교하고, 첫 번째 요소가 동일하면 두 번째 요소, 두 번째 요소도 같으면 세 번째 요소… 이런 방식으로 순차적으로 비교하여 정렬한다.
'BOJ 코딩테스트 > Silver' 카테고리의 다른 글
[BOJ] 1303. 전쟁 - 전투 (Python/그래프탐색/Silver 1) (0) | 2024.11.16 |
---|---|
[BOJ] 5212. 지구 온난화 (Python/구현/Silver 2) (0) | 2024.11.07 |
[BOJ] 2563. 색종이 (Python/구현/Silver 5) (0) | 2024.11.04 |
[BOJ] 2002. 추월 (Python/구현/Silver 2) (1) | 2024.10.29 |
[BOJ] 1021. 회전하는 큐 (Python/자료구조/Silver 3) (1) | 2024.10.29 |