본문 바로가기

백준 write-up/정렬 & 그리디

[백준] 생일 : 5635번 - Python

728x90
반응형

https://www.acmicpc.net/problem/5635

 

5635번: 생일

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

www.acmicpc.net

 

 

 

문제의 접근 방법

 

- 가장 나이가 많은 사람과 적은 사람을 어떻게 정렬할 수 있을지

- 여러 개의 값을 입력 받아 리스트에 저장하기

 

 

 

내가 막혔던 부분

 

나이가 많은 사람이라는 것은 내림차순으로 정렬했을 때, 가장 첫 번째 인덱스 값을 의미하고

나이가 적은 사람이라는 거슨 오름차순으로 정렬했을 때, 가장 첫 번째 인덱스 값을 의미한다.

 

 

 

문제 풀이 방법

 

n명의 학생을 의미하는 n값 입력 받기 -> 나이가 많은 순서대로, 적은 순서대로 정렬할 수 있게 빈 리스트 두 개 arr1, arr2 선언 -> n명 만큼 학생 이름, 생년월일 입력받기 -> 입력 받은 것을 생년월일을 앞으로 해서 리스트에 저장 (나이를 기준으로 정렬하기 위해서) -> arr1은 오름차순으로, arr2는 내림차순으로 정렬하기 -> 가장 앞의 배열에서 이름을 출력할 수 있는 인덱스 값을 입력하여 출력하기

 

 

 

소스코드

n = int(input())

arr1 = []
arr2 = []

for _ in range(n):
    name, dd, mm, yyyy = input().split()
    dd = int(dd)
    mm = int(mm)
    yyyy = int(yyyy)
    arr1.append([yyyy,mm,dd,name])
    arr2.append([yyyy,mm,dd,name])

arr1.sort()
arr2.sort(reverse=True)

print(arr2[0][3])   # 내림차순 정렬 = 가장 나이가 많은 사람
print(arr1[0][3])   # 오름차순 정렬 = 가장 나이가 적은 사람
728x90
반응형