문제 설명
- 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램
- 중복된 단어는 하나만 남기고 제거
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력값
- 단어의 개수 N
- ~N : 단어(길이 < 50)
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
출력값
- 조건에 따라 단어들 출력
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
정답 코드
# 114312KB, 152ms(PyPy3)
N = int(input())
sentence = set() # set으로 중복 제거
for _ in range(N) :
word = input()
sentence.add(word)
sentence = sorted(sentence) # 사전순 정렬
sentence.sort(key=lambda x : len(x)) # 길이순 정렬
# sentence.sort(key=len) 로 해도 됨!
for word in sentence :
print(word)
- sort를 사용하면 기본적으로 사전순 정렬이 됨
- lambda를 사용해 길이순 정렬을 했으나, sentence.sort(key=len)으로 해도 같은 결과가 나옴
다른 풀이
# 113368KB, 140ms
N = int(input())
temp = [[] for _ in range(50)] # 단어 길이 50 이하
for _ in range(N) :
word = input()
temp[len(word)-1].append(word) # 길이순 입력
# 사전순 정렬
for words in temp :
test = '' # 중복 체크
if words : # 값이 있을 때 확인
for word in sorted(words) :
if word != test :
print(word)
test = word
- 입력받을 때 단어 길이 인덱스로 입력받은 뒤 그 안에서 정렬
- 하나씩 값을 빼내어 중복 확인을 하고 출력하는 형태
- 시간과 메모리 측면에서 조금 더 효율적임
'개발새발개발' 카테고리의 다른 글
모듈, 제어문(반복문, 조건문), List comprehension, enumerate (6) | 2024.07.24 |
---|---|
float 소수점 설정, 문자열 슬라이싱, 깊은 복사와 얕은 복사 (5) | 2024.07.23 |
파이썬 기초(연산자, 진수, 변수, 데이터 타입, 시퀀스 타입, 스타일 가이드) (0) | 2024.07.18 |
리스트, 튜플, Range, dict, set, bool, None, 연산자, 형변환, 단축평가 (1) | 2024.07.18 |
GIT 원격저장소 gitignore Git revert reset (0) | 2024.07.15 |
댓글