728x90
제출코드
# state 3
N = int(input()) # N개의 단어
one = set() # 중복 제거할 세트 초기화
for i in range(N):
word = input() # N개의 단어를 받아서
one.add(word) # 세트에 넣어서 중복제거
word_lst = list(one) # 세트 one을 리스트로 만들기
word_lst.sort() # 오름차순 정렬
len_lst = [] # 길이 리스트 초기화
new_num = len(word_lst) # 반복문에 넣을 리스트의 길이
for n in range(new_num):
len_lst.append(len(word_lst[n])) # word_lst의 n번째 인덱스의 길이를 len_lst에 짝맞춤으로 넣기
for i in range(new_num-1, 0, -1): # 버블정렬
for j in range(i):
if len_lst[j] > len_lst[j+1]:
len_lst[j], len_lst[j+1] = len_lst[j+1], len_lst[j]
word_lst[j], word_lst[j+1] = word_lst[j+1], word_lst[j]
for result in word_lst:
print(result)
이 문제를 버블정렬로 풀면 파이썬에서는 거의 무조건 시간초과가 뜨는것 같고 pypy를 써서 68ms 차이로 통과했다.
세트를 이용하여 중복을 제거하고 리스트와 리스트요소 길이의 리스트를 짝맞춤하여 버블정렬로 뒤에서부터 정렬했다.
참고자료..
# 구글링 풀이
import sys
n = int(sys.stdin.readline())
lst = []
for i in range(n):
# sys.stdin.readline()은 \n\을 포함하는 입력이기 때문에 strip포함
lst.append(sys.stdin.readline().strip())
set_lst = set(lst) # list to set 중복제거
lst = list(set_lst) # 다시 리스트로 변환
lst.sort() # sort는 문자열 정렬도 해준다. abcd..
# sort(key = len) 길이순으로 정렬..
lst.sort(key = len)
for i in lst:
print(i)
# 코드 출처 : https://velog.io/@1204jh/1181
구글링 해보니 sort(key = len) 메소드로 너무 쉽게 정렬해버려서 솔직히 당황했다..
새로운 배움이었다고 생각하고 마무리!
| 2 초 | 256 MB | 173735 | 72793 | 54555 | 40.350% |
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
'알고리즘 > 백준' 카테고리의 다른 글
| 0206. [BOJ#14425] 문자열 집합 (1) | 2024.02.06 |
|---|---|
| 0205. [BOJ#28445] 알록달록 앵무새 (1) | 2024.02.05 |
| 0205. [BOJ#2167] 2차원 배열의 합 (1) | 2024.02.05 |
| 0203. [BOJ#10815] 숫자카드 (1) | 2024.02.03 |
| 0201. [BOJ#23968]알고리즘 수업 - 버블 정렬 1 (1) | 2024.02.01 |