https://www.acmicpc.net/problem/5635
문제
어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.
입력
첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)
다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다. 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31) 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.
이름이 같거나, 생일이 같은 사람은 없다.
출력
첫째 줄에 가장 나이가 적은 사람의 이름, 둘째 줄에 가장 나이가 많은 사람 이름을 출력한다.
문제 탐색하기
1. 나이가 적은 사람과 나이가 많은 사람을 출력해야 함.
2. 생일이 같거나, 이름이 같은 사람은 없음. 즉, 중복이 없음
입력 값들을 이중 배열에 넣으면, [0]: 이름 [1]: 일 [2] 월 [3] 연도 순이니까 [3] 인덱스 부터 비교를 하면 된다.
코드 설계하기
1. 개수 입력 받기
2. input 받아서 순서대로 이름, 일, 월, 년 배열에 넣는다. (이중 배열)
3. sort()와 lambda를 활용하여 [3], [2], [1] 인덱스 순으로 비교해서 정렬한다.
4. [-1]번째 = 나이 가장 적은 사람, [0]번째 = 나이 가장 많은 사람이므로 이 둘의 0번째 인덱스를 출력한다.
시도 회차 수정사항
- input 호출 실수, imput()이 아니라 input[0], input[i]로 받아야 한다.
코드
import sys
input = sys.stdin.readlines()
n = int(input[0].strip())
data = []
for i in range(1, n + 1):
name, day, month, year = input[i].split()
data.append([name, int(day), int(month), int(year)])
data.sort(key=lambda x: (x[3], x[2], x[1]))
print(data[-1][0])
print(data[0][0])
'코테 공부 > BOJ' 카테고리의 다른 글
[백준] 2947번 - 나무 조각 (파이썬) (0) | 2024.09.14 |
---|---|
[백준] 25305번 - 커트라인 (파이썬) (1) | 2024.09.13 |
[백준] 1181번 - 단어 정렬 (파이썬) (1) | 2024.09.11 |
[백준] 10814번 - 나이순 정렬 (파이썬) (1) | 2024.09.10 |
[백준] 2309번 - 일곱 난쟁이 (파이썬) (3) | 2024.09.09 |