개미의 개열시미 프로그래밍

[알고리즘] 백준1181 단어정렬 - 파이썬 본문

알고리즘/정렬

[알고리즘] 백준1181 단어정렬 - 파이썬

YunHyeok 2021. 8. 19. 14:10
728x90
반응형

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

 

1181번: 단어 정렬

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

www.acmicpc.net

 

 

[나의 풀이 코드]

from sys import stdin

n = int(input())
a = []
b = []

for _ in range(n):
    a.append(stdin.readline().split()[0])

a = sorted(set(a)) # 중복제거

for i in a: # 길이를 추가해서 b에 붙이기
    b.append([i, len(i)])

# 알파벳순으로 정렬 후 길이순으로 정렬
b.sort(key=lambda x : x[0])
b.sort(key= lambda x : x[1])

for i in b:
    print(i[0], sep='\n')

- 중복은 set() 함수를 이용해서 제거한 뒤 list로 감아줬어야 했는데 sotred도 정답처리가 된 걸 보면 리스트로 감기는 것 같습니다. 

- 길이를 각 요소에 추가하였고 정렬할때는 알파벳순으로 먼저 정렬 후 길이 순으로 정렬을 해서 출력했습니다.

 

[다른 분의 코드]

n = int(input())
a = []

for _ in range(n):
    word = str(input())
    a.append((word, len(word)))

a = list(set(a))

# 길이정렬 > 알파벳정렬
a.sort(key= lambda x:(x[1], x[0]))
for i in a:
    print(i[0])

 

- 미숙했던 제 코드를 좀 더 보완한 느낌? 입니다. 람다로 정렬하는 부분에서 저렇게 정렬할 수 있는 것을 확인할 수 있었습니다.

728x90
반응형
Comments