문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
1. 길 이가 짧은 것부터
2. 길 이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
내가 쓴 코드 1
N = int(input()) # N 개의 단어
# 1. 길이가 짧은 것부터 정렬
# 2. 길이가 같으면 사전 순으로 정렬
# 조건 : 중복 단어 제거
word_lst = [] # 단어 리스트
len_lst = [] # 단어 길이 저장 리스트
# 단어 입력 받아 word_lst, len_lst 생성
for n in range(N):
word = input()
word_lst.append(word)
len_lst.append(len(word))
# 길이 순으로 word_lst 내 단어 정렬
for i in range(N-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]
# word_lst 내 중복 단어 제거
one_word = []
for word in word_lst:
if word not in one_word:
one_word.append(word)
# one_lst 길이 같은 단어 사전순 정렬
for w in range(len(one_word)-1):
if len(one_word[w]) == len(one_word[w+1]):
if one_word[w] > one_word[w+1]:
one_word[w], one_word[w+1] = one_word[w+1], one_word[w]
for w in range(len(one_word)-1):
if len(one_word[w]) == len(one_word[w+1]):
if one_word[w][0] == one_word[w+1][0]:
if one_word[w][1] > one_word[w+1][1]:
one_word[w], one_word[w+1] = one_word[w+1], one_word[w]
for word in one_word:
print(word)
내가 쓴 코드 2
N = int(input())
words =[input() for _ in range(N)]
words = list(set(words))
words.sort()
words.sort(key=len)
for i in range(len(words)):
print(words[i])
03.05. 하핫 한 달만에 정답 코드 가져오기 ^^* 틀렸던 거 거슬려서 오늘 구글링해서 해결봤다!!!
진짜 이리 간단한 걸... 혼자 무슨 짓을 한건지 ㅎ^^ㅎㅎ
출력 결과

제출 결과

728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
| [BOJ #28445] 알록달록 앵무새 (2) | 2024.02.05 |
|---|---|
| [BOJ #10815] 숫자 카드 (3) | 2024.02.04 |
| [SWEA #16268] 풍선팡2 (1) | 2024.02.02 |
| [SWEA #9367] 점점 커지는 당근의 개수 (2) | 2024.02.02 |
| [SWEA #9386] 연속한 1의 개수 (1) | 2024.02.02 |