아이공의 AI 공부 도전기

[Baekjoon] 1181번 : 단어 정렬 (Python, 문자열, 정렬)

 

     

 

 

 

https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

www.acmicpc.net

코드 링크

https://github.com/stellaluminary/Baekjoon

 

GitHub - stellaluminary/Baekjoon

Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.

github.com

 

Python

 

방법 1 - 메모리 30840KB / 시간 68ms / 코드 길이 B

 

초기 시도

우선 단어들에 대한 입력을 받아 길이별로 list를 넣는다.

이후 1개 이상의 리스트일 때 중복 없게 하기위한 set과 더불어 사전 순을 위한 sort를 사용한다.

 

import sys
input = sys.stdin.readline

n = int(input())
l = [input().rstrip() for i in range(n)]

t = [[] for _ in range(51)]

for i in range(len(l)):
    t[len(l[i])].append(l[i])

for i in range(len(t)):
    if len(t[i]) == 0:
        continue
    elif len(t[i]) == 1:
        print(t[i][0])
    else:
        t[i] = list(set(t[i]))
        t[i].sort()
        for j in range(len(t[i])):
            print(t[i][j])

 

방법 2 - 메모리 35452KB / 시간 100ms / 코드 길이 165B

 

초기 sort를 통해 사전순으로 정렬한다.

이후 key=len을 통해 재정렬을 진행함으로써 길이별로 정렬을 진행

 

import sys
input = sys.stdin.readline

n = int(input())
l = [input().rstrip() for i in range(n)]
l = list(set(l))
l.sort()
l.sort(key=len) 

for i in l:
    print(i)

 

 

 

방법 3 - 메모리 35452KB / 시간 120ms / 코드 길이 208B

 

길이에 대한 정보와 함께 단어를 함께 list에 저장하고 sort를 진행하면 순차적으로 정렬되는 것을 확인할 수 있다.

이를 통한 결과를 도출한다.

 

import sys
input = sys.stdin.readline

n = int(input())
l = [input().rstrip() for i in range(n)]
l = list(set(l))
t = []
for i in l:
    t.append((len(i), i))

t.sort()

for length, word in t:
    print(word)

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading