문제 링크: https://www.acmicpc.net/problem/1181
문자열을 정렬하고 중복을 제거하는 문제이다.
n = int(input())
li = [input().strip() for _ in range(n)]
li = list(set(li))
li.sort(key=lambda x: (len(x), x))
print('\n'.join(li))
입력받은 문자열을 strip()으로 한 글자씩 리스트에 저장하고
set()으로 중복 제거
lambda를 써서 정렬 기준을 정한 후, sort 함수로 정렬
입력 부분: O(n$\times$m) $\leftarrow$ m 은 각 단어의 평균 길이
set() 변환: O(n)
list() 변환: O(n)
정렬 과정: Python의 sort()는 Timesort 알고리즘을 사용하므로 O(k$\times$n log n)
문자열 비교: O(m) $\leftarrow$ m 은 각 단어의 평균 길이
출력 부분: O(n$\times$m) $\leftarrow$ m 은 각 단어의 평균 길이
$\therefore$ 총 시간 복잡도: O(m$\times$n log n)
import sys
n = int(sys.stdin.readline())
li = [sys.stdin.readline().strip() for _ in range(n)]
li = list(set(li))
li.sort(key=lambda x: (len(x), x))
print('\n'.join(li))
[Python/파이썬] 백준 # 10828 스택 (0) | 2025.04.08 |
---|---|
[Python/파이썬] 백준 # 26069 (0) | 2025.04.03 |
[Python/파이썬] 백준 #1157 단어 공부 (0) | 2025.03.22 |
[Python/파이썬] 백준 #1018 체스판 다시 칠하기 (0) | 2025.03.21 |
[Python/파이썬] 백준 #2346 풍선 터뜨리기 (0) | 2025.03.20 |