문제링크
생일 : https://www.acmicpc.net/problem/5635
문제탐색
기본 원리 탐색
생년월일이 주어진 학생들의 나이 중 최소값과 최대값을 구하는 문제입니다.
이 문제를 해결하기 위해 다음과 같은 조건에 따라 정렬하거나, 데이터를 순회하며 최소/최대 값을 갱신해야 합니다:
- 출생 연도를 기준으로 비교합니다.
- 출생 연도가 같다면 출생 월을 기준으로 비교합니다.
- 출생 월이 같다면 출생 일을 기준으로 비교합니다.
시간복잡도와 알고리즘
시간제한 : 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]) #가장 나이가 많은사람
'Study > 알고리즘' 카테고리의 다른 글
[알고리즘] 나무 조각 - 구현 (0) | 2025.01.11 |
---|---|
[알고리즘] 커트라인 - 구현 (0) | 2025.01.10 |
[알고리즘] 단어 정렬 - 정렬 (0) | 2025.01.08 |
[알고리즘] 나이순 정렬 - 정렬 (1) | 2025.01.08 |
[알고리즘] 일곱 난쟁이 - 정렬 (0) | 2025.01.06 |
댓글