본문 바로가기
Study/알고리즘

[알고리즘] 생일 - 정렬

by 돌문어우엉 2025. 1. 9.

문제링크

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

 

문제탐색

기본 원리 탐색

생년월일이 주어진 학생들의 나이 중 최소값과 최대값을 구하는 문제입니다.
이 문제를 해결하기 위해 다음과 같은 조건에 따라 정렬하거나, 데이터를 순회하며 최소/최대 값을 갱신해야 합니다:

  1. 출생 연도를 기준으로 비교합니다.
  2. 출생 연도가 같다면 출생 월을 기준으로 비교합니다.
  3. 출생 월이 같다면 출생 일을 기준으로 비교합니다.

 

시간복잡도와 알고리즘

시간제한 : 1초

=> 약 1억번의 연산을 기준으로 합니다.

 

회원수 : 최대 100명

 => 이 경우, 시간 복잡도가 O(n²) 인 알고리즘이라 하더라도 최대 10,000번의 연산만 필요합니다.

따라서 이 문제는 시간 복잡도가 크게 영향을 미치지 않습니다.

 

=> 따라서 구현을 위해 정렬을 통해 최대, 최소값을 구하기러 합니다.

 

코드설계하기

 

  • 입력받은 이름, 출생일, 출생월, 출생년도를 리스트에 저장합니다.
    • 이때, 정렬 기준으로 사용하기 위해 연도부터 역순으로 저장합니다.
  • sorted 함수를 사용하여 리스트 내 모든 원소를 내림차순으로 정렬합니다.
    • 이때 정렬 시 자동으로 연도 → 월 → 일을 기준으로 순서가 결정됩니다.
  • 정렬된 리스트의 첫 번째 값과 마지막 값을 출력하여 최소값과 최대값을 구합니다.

 

 

시도회차 수정사항

 

정답코드

n=int(input())

birthday=[]

for x in range(n):
    name,day,month,year = input().split()
    birthday.append([int(year),int(month),int(day),name]) #역순으로 입력 

birthday=sorted(birthday,reverse=True) #내림차순 정렬

print(birthday[0][3]) #가장 나이가 적은사람
print(birthday[-1][3]) #가장 나이가 많은사람

댓글