문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
코드
# N : 단어의 개수
N = int(input())
str_list = []
for i in range(N):
str_list.append(input())
# 중복 제거
str_list = list(set(str_list))
# 그냥 정렬
str_list.sort()
# 문자열의 길이는 50이 넘지 않는다.
result = []
for i in range(1,51):
for str in str_list:
if len(str) == i:
result.append(str)
print(*result,sep="\n")
NOTE
리스트 문자열의 중복을 제거하는 방법
- set의 특성 사용하기
- for 문 이용
- dictionary를 활용
1. set 의 특성 사용하기
중복 요소가 없고, 정렬되지 않는 자료구조이다.
list를 set명령어를 통해 set으로 변환되는 과정에서 중복을 제거한 후 그 뒤 list로 다시 변환하여 해당 내장함수 sort를 이용할 수 있다.
2. for문 이용하기
중복 된 값을 알고 있다면, 중복되는 요소만 따로 리스트를 만들어 반복문을 통해서, 중복되는 요소를 제외한 나머지 요소들을 추가하는 방식이다.
3. dictionary를 활용
dictionary도 set과 마찬가지로 중복되는 요소가 없는 특징을 이용하는 방식이 있다.
=> 나는 이중에 첫번째 방법인 set을 이용하여 중복 요소를 제거하였다.
리스트 출력
Unpacking operator 를 이용했다.
print(*result,sep="\n")
sep 에는 구분자를 입력해주면 된다.
코드 설명
문자열이 50이 넘지 않는 다는 것을 살려, 우선 전체적으로 정렬을 한 뒤 1부터 순서대로 다른 리스트에 저장하도록 하였다.
다른 블로그들을 보니 ,,sort(key=len) 를 이용해 길이 순서대로 정렬하는 방법을 이용하였다. 이방법이 더 유용한 것 같다.
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
'CodingTest' 카테고리의 다른 글
[BOJ / Python] 8320 직사각형을 만드는 방법 (1) | 2024.01.14 |
---|---|
[BOJ / Python] 1181 단어 정렬 - ord(), chr() (1) | 2024.01.14 |
[BOJ / Python] 5622 다이얼 (1) | 2023.12.22 |
[BOJ / Python] 1978 소수 찾기 (0) | 2023.12.21 |
[BOJ / Python] 2750 수 정렬하기 (1) | 2023.12.20 |