
[최종 코드]
import sys
n = int(input())
words = [input() for _ in range(n)]
# 중복 제거
words_set = set(words)
words = list(words_set)
# 정렬
words.sort(key=lambda x: (len(x), x))
sys.stdout.write('\n'.join(map(str, words)) + '\n')
[핵심 부분]
words.sort(key=lambda x: (len(x), x))
📝 정렬 키 원리 분석: key=lambda x: (len(x), x)
이 코드는 리스트 word_list의 각 요소(문자열)를 정렬하기 전에, **임시로 사용할 정렬 기준(Key)**을 만들어내는 역할을 합니다.
1. lambda x: (...) (임시 키 생성)
lambda는 이름 없는 함수(익명 함수)를 만드는 Python 문법입니다.
- x: word_list의 각 요소, 즉 하나의 문자열을 의미합니다. (예: "banana")
- (...): 이 함수가 반환하는 값, 즉 정렬 기준이 될 튜플을 의미합니다. (예: (6, "banana"))
2. (len(x), x) (튜플을 이용한 복합 기준)
lambda 함수가 (len(x), x)라는 튜플을 반환하는 것이 핵심입니다.
정렬 함수(여기서는 .sort())는 이 튜플을 기준으로 정렬을 수행할 때, 튜플의 요소를 왼쪽에서 오른쪽으로 순차적으로 비교합니다.
| 튜플 요소 | 의미 | 비교 순서 (우선순위) |
| len(x) | 문자열의 길이 | 1순위 (가장 먼저 비교) |
| x | 문자열 자체 | 2순위 (길이가 같을 때 비교) |
3. 실제 정렬 시뮬레이션
다음 단어 리스트를 정렬한다고 가정해 봅시다: ["apple", "kiwi", "zoo", "banana"]
| 원본 단어 (x) | 길이 (len(x)) | lambda가 반환하는 정렬 키 |
| "apple" | 5 | (5, "apple") |
| "kiwi" | 4 | (4, "kiwi") |
| "zoo" | 3 | (3, "zoo") |
| "banana" | 6 | (6, "banana") |
'백준 - 파이썬 > 단계별 - 13 (정렬)' 카테고리의 다른 글
| *[백준/파이썬] 18870번 좌표 압축 | enumerate함수 (0) | 2025.10.31 |
|---|---|
| *[백준/파이썬] 11651번 좌표 정렬하기 2 | lambda함수 이용 정렬 (0) | 2025.10.22 |
| *[백준/파이썬] 11650번 좌표 정렬하기 (0) | 2025.10.22 |
| [백준/파이썬] 1427번 소트인사이드 (0) | 2025.10.22 |
| *[백준/파이썬] 10989번 수 정렬하기 3 | 계수 정렬 (Counting Sort) | 메모리초과 주의 (1) | 2025.10.22 |