문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
최종 답:
words=[]
N = int(input())
for n in range(N):
words.append(input())
words=list(set(words)) #중복 제거
words.sort() #알파벳 순으로 정렬
words.sort(key=len) #요소 길이 순으로 정렬
for i in words:
print(i)
문제풀이:
words=[]
N = int(input())
for n in range(N):
words.append(input())
먼저 리스트의 개수(N)와 입력된 단어를 하나씩 리스트(words)에 넣는다.
words=list(set(words)) #중복 제거
words.sort() #알파벳 순으로 정렬
words.sort(key=len) #요소 길이 순으로 정렬
set() 함수는 중복을 제거하는 필터 역할을 한다.
list.sort()는 리스트를 작은 수부터 큰 수로 오름차순으로 정렬해주는 기능을 한다. 알파벳 문자의 경우 abcd순으로 정렬된다. 만약 대문자가 섞여 있는 리스트라면 소문자로 바꾼 후에 정렬해야 한다.
sort()함수의 파라미터 key=len을 넣으면 리스트 안 요소의 길이 순으로 정렬된다.
*추가설명: 왜 words.sort() 줄이 들어가야만 하는지?
.sort(key=len)은 오로지 길이에 대해서만 정렬하고 알파벳 순서는 고려하지 않는다. 예를 들어 [bc, c. ab]의 경우 .sort(key=len)만 쓰면 [c, bc, ab]이렇게 정렬된다. .sort()를 한번 더 써 주어야 [c, ab, bc] 로 정렬될 수 있다.
**추가설명: sort()와 sorted()의 차이?
sorted()는 새롭게 정렬된 리스트를 반환하고
sort()는 리스트 자체를 정렬한다.
*완성된 코드는 깃허브에 올려두었습니다.
Baekjoon/1181_answer.ipynb at main · Ronnie-hh/Baekjoon (github.com)
'프로그래밍 > 백준 문제풀이' 카테고리의 다른 글
1920. 수 찾기 (파이썬) | 이분탐색 | 정렬 (0) | 2023.05.03 |
---|---|
1654. 랜선 자르기 (파이썬) | 이분 탐색 | 매개변수 탐색 (0) | 2023.04.29 |
1259. 펠린드롬수 (파이썬) (0) | 2023.02.10 |
1085. 직사각형에서 탈출 (파이썬) (0) | 2023.02.07 |
1018. 체스판 다시 칠하기 (파이썬) (0) | 2023.01.16 |