Python/알고리즘 - 백준
[백준] 1181 : 단어 정렬 (파이썬)
Jong_seoung
2022. 10. 24. 23:04
반응형
문제 링크 : https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net


문제 요약
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
TRY CODE 1 - 런타임 에러
n = int(input())
b = []
c = list(set(b))
c.sort()
for i in range(n):
b.append(input())
for i in list(set(b)):
d = min(c, key=len)
c.remove(d)
print(d)
TRY CODE 2 - 시간 초과
n = int(input())
b = []
for i in range(n):
a = input()
b.append(a)
c = list(set(b))
e = list(set(b))
c.sort()
print(c)
for i in e:
d = min(c, key=len)
c.remove(d)
print(d)
문제점
- 시간 초과, 런타임 에러
- 처음에 중복되는 값을 없애고 길이가 짧은 것부터 나열하는 것 까지는 쉬웠는데 사전 순으로 배열해야 한다는 게 너무 어렵게 다가왔다.
해결법
- 해답은 생각보다 쉬운곳에 있었다. 우선 set을 사용하여 중복되는 값을 없앤 후 사전 순으로 정렬한 후 길이 순으로 정렬하니깐 문제가 해결되었다.
CODE
n = int(input())
b = []
for i in range(n):
b.append(input())
c = list(set(b))
c.sort()
c.sort(key=len)
for i in c:
print(i)
풀이
1. c 의 리스트에 중복을 없애준다.
c = list(set(b))
2. c를 사전 순으로 정리해준다.
c.sort()
3. c를 길이순으로 정렬해준다.
c.sort(key=len)
반응형