일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 위니브
- 네트워크기초
- 코딩테스트
- 파이썬
- 리눅스퍼미션
- 링크명령어
- javascript
- 백준
- 파일명령어
- 제주ICT
- Linux
- 백준1312
- 리눅스셸명령어
- 리눅스기초
- 더오름
- 백준2587
- 자료구조
- 디렉토리관리
- 네트워크
- 컴퓨터네트워크
- Python
- 개발자
- 코테준비
- 코테
- 제주코딩베이스캠프
- 터미널명령어
- 네트워크면접
- 리눅스
- 네트워크정리
- 네트워크핵심정리
- Today
- Total
hyei-devlog
[Python/파이썬] 백준 1181 단어 정렬 본문
📍 문제
https://www.acmicpc.net/problem/1181

📍 전체 코드
N = int(input())
num_list = []
for i in range(N):
num_list.append(input())
sorted_list = sorted(set(num_list), key=lambda x: (len(x), x))
for i in range(len(sorted_list)):
print(sorted_list[i])
📍 문제 풀이
문제에서 요구한 조건 3가지
알파벳 소문자로 이루어진 N개의 문자열을 1. 길이가 짧은 것부터 2. 길이가 같으면 사전 순으로 정렬한다.
3. 중복된 단어는 하나만 남기고 제거한다.
sorted_list = sorted(set(num_list), key=lambda x: (len(x), x))
- set() 함수를 적용하여 중복을 제거한다. (조건3)
- sorted() 함수는 기본적으로 오름차순 정렬을 수행한다. key 매개 변수를 사용하여 정렬 기준을 직접 지정한다. (조건1, 조건2)
- len(x): 문자열 길이
- x: 문자열 자체
📍 문제 해결을 위한 고민
조건이 하나인 경우 key를 사용하는 방법을 알고 있었지만,
첫번째 조건(길이)이 같은 경우 두번째 조건(사전순)을 적용하는 방법이 고민이었다.
방법을 고민하던 중 lambda 함수를 사용하여 푸는 방법을 알게 되었다.
sorted_list = sorted(set(num_list), key=lambda x: (len(x), x))
lambda 함수를 사용하여 key에 튜플 형식으로 정렬 기준을 전달했다.
key=lambda x: (len(x), x)는 각 알파벳 소문자 문자열을 (길이(len), 문자열(str)) 형태의 튜플로 변환한다.
정렬은 튜플의 첫 번째 요소(길이)를 기준으로 정렬하고, 길이가 같으면 두 번째 요소(사전순)로 정렬한다.
‼️ 주의사항
for i in range(N):
print(sorted_list[i])
set() 함수를 사용하여 중복 값을 제거하면, 리스트의 크기가 N보다 줄어든다.
반복문을 실행하면 인덱스를 초과할 수 있다.
for i in range(len(sorted_list)):
print(sorted_list[i])
따라서, 반복문의 범위를 len(sorted_list)로 수정해주었다.
⭐️ 중요 포인트 & 개념 정리
- 파이썬의 sorted() 함수나 리스트의 sort() 메서드는 기본적으로 오름차순 정렬을 수행한다.
- key 변수를 사용하면 정렬 기준을 직접 지정할 수 있다.
- key에 함수를 전달하는 경우, 이 함수는 리스트의 각 요소를 받아서 정렬 기준으로 사용할 값을 반환해야 한다.
- lambda란?
lambda는 파이썬에서 사용하는 익명함수(이름없는 함수)이다.
간단한 연산을 수행할 때 유용하다.
lambda x: (len(x), x) # 입력값 x를 받아서 (len(x), x)라는 튜플을 반환하는 함수
- len(x) → 문자열의 길이를 반환
- x → 문자열 자체를 반환
예시) 리스트 ["apple", "fig", "dog"]의 각 요소에 대해 lambda x: (len(x), x)를 적용하면 결과는 다음과 같다.
"apple" -> (5, "apple")
"fig" -> (3, "fig")
"dog" -> (3, "dog")
+ 응용하기
길이는 짧은 순, 사전순은 역순으로 정렬하려면 다음과 같이 코드를 작성하면 된다.
sorted_words = sorted(words, key=lambda x: (len(x), -ord(x[0])))
'Online Judge > Baekjoon' 카테고리의 다른 글
[Python/파이썬] 백준 2575 오븐 시계 (0) | 2025.02.01 |
---|---|
[Python/파이썬] 백준 25305 커트라인 (0) | 2025.02.01 |
[Python/파이썬] 백준 1284 집 주소 (0) | 2025.01.27 |
[Python/파이썬] 백준 10039 평균 점수 (0) | 2025.01.27 |
[Python/파이썬] 백준 1247 부호 (0) | 2025.01.26 |