개발/python

[백준 1181번] 단어 정렬 - python

dotudy 2025. 8. 14. 21:39

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

📌 문제 탐색하기

  1. 시간 제한이 1초니까 최대 2중 for문까지만 가능하다.
  2. 반에 있는 학생 수 n 입력으로 주어지고
  3. 이름, dd, mm, yyyy가 주어져서 나이 가장 적은 사람과 가장 많은 사람의 이름을 출력하는 것이군!
  4. 각각 하나를 배열로 저장하려면 2차원 배열이어야하는데 다른 방법없나? + 입력 받을 때마다 가장 나이가 많은 사람과 적은 사람을 저장할 수 없나?
  5. 날짜가 거꾸로 주어져 있으니까 yyyymmdd로 바꿔서 저장하고 int로 바꿔서 매턴마다 비교해서 이름 저장해야겠다!

📌 코드 설계하기

  • 입력 n 받고
  • for문 돌면서 입력 받을 때 split()으로 받는다. 그리고 다시 date라는 변수에 yyyymmdd를 저장한다.
  • 매 생일이 입력될 때마다 min값과 max값과 비교해서 min값보다 더 작거나 max값보다 더 클 경우 업데이트하면서 저장하자.
  • 아! min, max값들이 저장될 때 min_name과 max_name 변수를 둬서 이름까지 같이 관리하자.
  • 마지막에 min_name, max_name 뜨면 성공!

📌 정답 코드

n = int(input())
max = 0
min = 20110000
max_name = ''
min_name = ''
for i in range(n):
    name, dd, mm, yyyy = input().split()
    if len(mm) != 2:
        mm = "0"+ mm
    if len(dd) != 2:
        dd = "0"+ dd
    date =int(yyyy+mm+dd)
    if max < date:
        max = date
        max_name = name
    if min > date:
        min = date
        min_name = name

print(max_name)
print(min_name)