문제 링크 : https://www.acmicpc.net/problem/1181
풀이
arr = []
for _ in range(int(input())):
m = input()
if m in arr:
continue
if len(arr) == 0:
arr.append(m)
for i in range(len(arr)):
if len(arr[i]) > len(m):
arr.insert(i, m)
break
elif len(arr[i]) == len(m):
if arr[i] > m:
arr.insert(i, m)
break
if m not in arr:
arr.append(m)
for i in arr:
print(i)
처음엔 위와 같이 in, len()과 비교 연산 등을 사용하여 문제를 풀려했으나 시간 초과가 발생하였다. O(n²)의 비교 연산을 여러 번 수행하기 때문이라고 생각해 python의 sort를 사용해보았다.
s = set([])
for _ in range(int(input())):
m = input()
s.add(m)
s = list(s)
s.sort()
s.sort(key=len, reverse=False)
for i in s:
print(i)
일단 set을 활용하여 중복되는 값이 들어가지 않도록 하였고, 그 후 set을 리스트로 변환하였다.
첫번째 sort에선 문제의 요구사항대로 사전순으로 정렬하였고, 두번째 sort에서는 key로 len을 사용하여 글자 수가 짧은 순서대로 정렬하였다.
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
(Python) 백준 2751번 - 수 정렬하기 2 (0) | 2022.12.27 |
---|---|
(Python) 백준 1978번 - 소수 찾기 (0) | 2022.12.26 |
(Python) 백준 1436번 - 영화감독 숌 (0) | 2022.12.25 |
(Python) 백준 10989번 - 수 정렬하기 3 (0) | 2022.12.20 |
(Python) 백준 1259번 - 팰린드롬수 (1) | 2022.09.23 |