Stay Hungry Stay Foolish

BOJ 코딩테스트/Silver

[BOJ] 5635. 생일 (Python/구현/Silver 5)

dev스카이 2024. 11. 6. 17:54

[문제 링크] 👉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()를 사용할 때는 기본적으로 각 튜플의 첫 번째 요소부터 차례대로 비교하여 정렬한다.
  • 즉, 다차원 요소가 들어 있는 리스트에서 정렬 기준이 명시되지 않으면 튜플의 첫 번째 요소부터 비교하고, 첫 번째 요소가 동일하면 두 번째 요소, 두 번째 요소도 같으면 세 번째 요소… 이런 방식으로 순차적으로 비교하여 정렬한다.