Tiny Bunny
본문 바로가기
Algorithm/Python

[BOJ #1181] 단어 정렬

by nowag 2024. 2. 2.

문제

알파벳 소문자로 이루어진 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