어떤 반에 있는 학생들의 생일이 주어졌을 때, 가장 나이가 적은 사람과 가장 많은 사람을 구하는 프로그램을 작성하시오.
- 첫째 줄에 반에 있는 학생의 수 n이 주어진다. (1 ≤ n ≤ 100)
- 다음 n개 줄에는 각 학생의 이름과 생일이 "이름 dd mm yyyy"와 같은 형식으로 주어진다.
- 이름은 그 학생의 이름이며, 최대 15글자로 이루어져 있다. dd mm yyyy는 생일 일, 월, 연도이다. (1990 ≤ yyyy ≤ 2010, 1 ≤ mm ≤ 12, 1 ≤ dd ≤ 31)
- 주어지는 생일은 올바른 날짜이며, 연, 월 일은 0으로 시작하지 않는다.
- 이름이 같거나, 생일이 같은 사람은 없다.
📌 문제 탐색하기
우리가 문제를 이해해가는 과정을 작성하시면 됩니다.
- 문제에서 구해야 하는 최종 정답은 무엇인지 탐색한 과정
- 그 정답을 구하기 위해 어떻게 코드를 구현해야 할지 고민한 과정
- 문제에 들어오는 범위를 파악하며 어떤 알고리즘을 쓸 수 있을지 고민해 가는 과정 등을 작성해주시면 됩니다.
알고리즘 선택
- 모든 학생을 서로 비교하며 가장 나이가 많은 학생과 가장 어린 학생을 찾는 방식은 O(N^2) 시간 복잡도를 가지므로, N이 작을 때는 효율적이지만 N이 커질수록 비효율적인 방식이 된다.
- 그래서 학생 리스트를 정렬한 후, 첫 번째와 마지막 학생을 출력하는 방식으로 O(N log N) 시간 복잡도를 가지는 정렬 알고리즘을 선택했다. (N의 범위가 더 작다면 다른 접근법도 고려해볼 수는 있겠지만, 이 문제에서는 정렬이 가장 적합하다고 판단됨.)
- python 내장 함수인 'sort()' 함수 사용
📌코드 설계하기
위의 문제 탐색하기에서 고민한 과정을 토대로 문제 풀이에 대한 실마리를 잡으셨을 것 같습니다.
이제 문제 풀이를 본격적으로 하기 전, 이 문제를 풀기 위한 로드맵을 그려보겠습니다.
어떤 순서로 코드를 작성해야 할지, 어떤 함수들을 작성해야 할지 등을 작성해주시면 됩니다.
처음에는 어려울 수 있지만, 문제를 풀기 전 미리 지도를 그린다라는 생각으로 적어나가 보시면 좋을 것 같습니다 :)
- 학생 수를 정수로 입력 받는다.
- 1번에서 정의한 수만큼 단어를 입력하고 각 단어를 하나의 리스트에 년도, 월, 일, 이름 순으로 저장한다.
- 생일이 늦을수록(최근일수록)나이가 적으므로 내림차준 정렬
- 첫 번째와 마지막 학생을 출력
📌 시도 회차 수정 사항 (Optional)
- 무문별하게 “맞았습니다”가 나올때 까지 수정하는 형태의 문제 풀이를 반복하면 , 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 됩니다.
- 틀렸습니다를 받았다면 왜 틀렸는지 고민해보고 , 어떻게 수정할 수 있는지 고민하는 과정을 작성해주시면 됩니다.
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검해보세요
- 한번에 맞출수도 있기 때문에 이 칸은 Optional입니다.
시도1
- yyyy, mm, dd 순으로 저장해야했는데 코드에서는 yyyy, dd, mm으로 순서를 잘못 입력했다.
N = int(input())
students = []
for _ in range(N):
name, dd, mm, yyyy = input().strip().split()
students.append([int(yyyy), int(dd), int(mm), name]) ### 틀린 코드 부분
students.sort(reverse=True)
print(students[0][3])
print(students[-1][3])
📌정답 코드
# 학생의 수 입력 받기
N = int(input())
students = []
for _ in range(N):
name, dd, mm, yyyy = input().strip().split()
students.append([int(yyyy), int(mm), int(dd), name])
# 생일이 늦을수록(최근일수록) 나이가 적으므로 내림차순 정렬
students.sort(reverse=True)
# 가장 어린 학생의 이름 (생일이 가장 늦음)
print(students[0][3])
# 가장 나이 많은 학생의 이름 (생일이 가장 빠름)
print(students[-1][3])
반응형
'Study > Algorithm' 카테고리의 다른 글
[코테 챌린지] 7일차. 덩치 (0) | 2024.08.11 |
---|---|
[코테 챌린지] 6일차. 나무조각 (0) | 2024.08.10 |
[코테 챌린지] 3일차. 단어 정렬 (0) | 2024.08.07 |
[코테 챌린지] 2일차. 나이순 정렬 (0) | 2024.08.06 |
[코테 챌린지] 1일차. 일곱난쟁이 (0) | 2024.08.05 |