개발/python

[백준 10814번] 나이순 정렬 - python

dotudy 2025. 8. 12. 23:34

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

📌 문제 탐색하기

  1. 시간 제한 3초
  2. 정수 n이 들어오고 n만큼 돌면서 나이와 이름 받기.
  3. 공백으로 받으니까 .spit()함수 쓰고 이차원 배열로 저장해야겠다.
  4. 나이를 기준으로 정렬하고 같은 수일 경우 먼저 입력된 값이 먼저 나오도록 하기.

📌 코드 설계하기

  • n값 받기
  • for문 n만큼 돌면서 arr에다가 나이랑 이름 split 해서 저장하기
  • 최초 배열에다가 arr 추가
  • 최초 배열의 [x][0]으로 정렬하기!
  • 같은 수는 먼저 입력된게 알아서 나오지 않나.? (해봐야 알듯!)

📌 개념 정리

  1. 2차원 리스트 요소 출력하기
    1. 한 리스트에서 요소 두 개를 꺼내서 저장하기
    2. a = [[10, 20], [30, 40], [50, 60]] for x, y in a: print(x, y) 10 20 30 40 50 60
    3. for문 두 번 사용해서 출력하기
    4. a = [[10, 20], [30, 40], [50, 60]] for i in a: for j in i: print(j, end=' ') print() 10 20 30 40 50 60
  2. 배열 정렬하기
    1. 1차원 배열 정렬하기
    list = [5, 3, 4]
    list.sort()  // list.sort(reverse=True)
    print(list)
    
    [3, 4, 5] // [5, 4, 3]
    
    * key 사용하기
    list = ["one", "two", "three", "four"]
    list.sort(key=len) # len에 따라서 정렬된다.
    print(list)
    
    ['one', 'two', 'four', 'three']
    
    b. 2차원 배열 정렬하기
  3. # 0번째 인덱스에 대해 오름차순 정리 list.sort(key=lambda x:x[0]) # 0번째 인덱스에 대해 오름차순 정리 후 1번째 인덱스에 대해 내림차순 정리 list.sort(key = lambda x: (x[0], -x[1]))

📌 시도 회차 수정 사항

  • 1차
n = int(input())
judge = []
for i in range(n):
    arr = list((input().split()))
    judge.append(arr)

judge.sort(key=lambda x:x[0])
# print(judge)

for x, y in judge:
    print(x, y)

혼자 테스트 케이스도 적어보고 실행해서 맞았는데도 백준에 제출하니 1%까지만 까고 틀렸다고 에러가 떴다. 뭐지…?

→ 오랜 고민 끝에 .. 내 코드는 문제가 없는데 왜지..? 하는 생각으로 구글링을 했다. 근데 이상한 점 발견. 다들 input을 받을 때

user_age, user_name = input().split()

이렇게 각각 받는 것이었다..! 아? 나는 list로 묶었는데..?! list로 묶으면 혹시 형변환되나./!? str으로???

그래서 출력을 해봤다.

<class 'str'>
20 Sunyoung
<class 'str'>
21 Junkyu
<class 'str'>
21 Dohyun

아… int가 아니라 str으로 들어갔구나..

  • 2차
n = int(input())
judge = []
for i in range(n):
    arr = list((input().split()))
    judge.append(arr)

judge.sort(key=lambda x:x[0])
# print(judge)

for x, y in judge:
    print(int(x), y)

근데도 틀렸다.

list로 묶으면 str으로 저장되니 x[0]을 기준으로 정렬할 때 숫자를 기준으로 정렬이 되는 것이 아니라 문자를 기준으로 정렬된다. 즉, 24, 3 중에 숫자 2가 더 빠르니 24가 먼저, 3이 나중에 출력되는 것이다. 그래서 .. 다시 형변환을 진행하였다.

드디어 성공!!

📌 정답 코드

n = int(input())
judge = []
for i in range(n):
    arr = list((input().split()))
    judge.append(arr)

judge.sort(key=lambda x:int(x[0]))
# print(judge)

for x, y in judge:
    print(int(x), y)