hyei-devlog

[Python/파이썬] 백준 10814 나이순 정렬 본문

Online Judge/Baekjoon

[Python/파이썬] 백준 10814 나이순 정렬

winter126 2025. 2. 2. 18:13

📍 문제

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

백준 10814 나이순 정렬

 

📍 전체 코드

N = int(input())
arr = []

for i in range(N):
    age, name = input().split()
    age = int(age)
    arr.append([age, name])

arr.sort(key=lambda x: x[0])

for i in range(N):
    print(arr[i][0], arr[i][1])

 

📍 문제 풀이

for i in range(N):
    age, name = input().split()
    age = int(age)
    arr.append([age, name])

 

N번 반복하면서 나이와 이름을 입력받아 리스트에 저장한다.

split()을 사용해 입력을 공백 기준으로 나누고, 나이는 정수형(int)으로 변환한다.

[나이, 이름] 형태의 리스트를 arr에 추가한다.

 

arr.sort(key=lambda x: x[0])

 

리스트 arr을 나이 기준으로 오름차순 정렬한다.

lambda x: x[0]을 정렬 기준으로 설정하여, 각 요소(리스트)의 첫번째 값(나이)을 기준으로 정렬한다.

 

📍 문제 해결을 위한 고민

arr.sort(key=lambda x: x[0])

 

리스트를 정렬할 때, 특정 기준을 설정하기 위해 sort()key 매개변수를 사용했다.

이때, lambda x: x[0]은 리스트의 각 요소 x에서 첫번째 값(x[0], 나이)을 기준으로 정렬하도록 지정하는 방법이다.

익명 함수 lambda를 활용하면 간결한 코드 작성이 가능하며, key에 직접 정렬 기준을 설정할 수 있다.

 

만약 나이가 같으면, arr.sort(key=lambda x: x[0])에서는 기본적으로 입력된 순서대로 정렬된다.

이유는 Python의 sort() 함수가 안정 정렬(stable sort) 방식을 사용하기 때문이다. 안정 정렬은, 정렬할 때 같은 값이 있을 경우 그 값의 순서가 원래 리스트에서의 순서를 유지하도록 보장한다.

따라서 나이가 같으면 처음 입력된 순서대로 나열된다.

 


 

출력 부분의 for 반복문을 더 간결하게 줄일 수 있다.

for age, name in arr:
    print(age, name)

 

for i in range(N) 대신 리스트 arr 자체를 순회하도록 하면, 인덱스를 사용하지 않아 코드가 더 직관적이고 가독성이 좋아진다.

 

위의 코드는 리스트 컴프리헨션을 사용하여 한 줄로 작성할 수 있는데 ...

* 권장되는 방법은 아니다. print()와 같은 부수효과를 일으키는 작업은 리스트 컴프리헨션에서 피하는 것이 좋다.

[print(age, name) for age, name in arr]

 

⭐️ 중요 포인트

리스트 정렬의 key 매개변수 활용
arr.sort(key=lambda x: x[0])를 통해 리스트의 첫 번째 요소인 age를 기준으로 리스트를 정렬한다.

key는 정렬 기준을 지정하는 매개변수로, lambda 함수를 사용하여 정렬 기준을 동적으로 설정할 수 있다.

이 방법은 복잡한 정렬 조건을 간단하게 표현할 수 있게 해준다.