일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 네트워크정리
- Linux
- 컴퓨터네트워크
- 코딩테스트
- 네트워크
- 리눅스퍼미션
- 제주코딩베이스캠프
- 네트워크기초
- 백준1312
- Python
- 디렉토리관리
- 백준
- 링크명령어
- 자료구조
- 리눅스기초
- 리눅스셸명령어
- javascript
- 제주ICT
- 코테준비
- 개발자
- 백준2587
- 코테
- 터미널명령어
- 네트워크면접
- 파이썬
- 네트워크핵심정리
- 더오름
- 리눅스
- 위니브
- 파일명령어
- Today
- Total
hyei-devlog
[Python/파이썬] 백준 10814 나이순 정렬 본문
📍 문제
https://www.acmicpc.net/problem/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 함수를 사용하여 정렬 기준을 동적으로 설정할 수 있다.
이 방법은 복잡한 정렬 조건을 간단하게 표현할 수 있게 해준다.
'Online Judge > Baekjoon' 카테고리의 다른 글
[Python/파이썬] 백준 1312 소수 (0) | 2025.02.25 |
---|---|
[Python/파이썬] 백준 2751 수 정렬하기 2 (0) | 2025.02.02 |
[Python/파이썬] 백준 2587 대표값2 (0) | 2025.02.02 |
[Python/파이썬] 백준 2575 오븐 시계 (0) | 2025.02.01 |
[Python/파이썬] 백준 25305 커트라인 (0) | 2025.02.01 |