728x90
시간제한 2초, 메모리제한 128MB
조건
- 접두사X 집합이란 집합의 어떤 한 단어가, 다른 단어의 접두어가 되지 않는 집합이다.
- 예를 들어, {hello}, {hello, goodbye, giant, hi}, 비어있는 집합은 모두 접두사X 집합이다. 하지만, {hello, hell}, {giant, gig, g}는 접두사X 집합이 아니다.
- 단어 N개로 이루어진 집합이 주어질 때, 접두사X 집합인 부분집합의 최대 크기를 출력하시오.
입력
- 첫째 줄에 단어의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에는 단어가 주어진다.
- 단어는 알파벳 소문자로만 이루어져 있고, 길이는 최대 50이다. 집합에는 같은 단어가 두 번 이상 있을 수 있다.
접근 방법
- 다른 단어의 접두사가 되는 단어는 항상 길이가 더 짧거나 같다.
- 반복문을 통해 현재 단어와 그 외 단어들을 확인한다.
- 현재 단어보다 길이가 긴 단어들을 확인하고 현재 단어가 다른 단어의 접두사인지 확인한다.
- 현재 단어가 접두사가 아니라면 res를 카운트한다.
import sys
n = int(sys.stdin.readline())
words = [(sys.stdin.readline()).rstrip() for _ in range(n)]
# 다른단어의 접두사가 되는 단어는 항상 다른단어보다 크기가 작거나 같다.
# 따라서 문자열의 길이가 짧은 순서대로 정렬을 하고, 자기 위치보다 뒤에있는 단어와만 비교한다.
words.sort(key=len)
res = 0
# 반복문을 통해 단어를 확인
for i in range(n):
flag = False
# 현재 단어보다 길이가 긴 단어를 확인
for j in range(i + 1, n):
# 현재 단어가 접두사인지 확인
if words[i] == words[j][0:len(words[i])]:
flag = True
break
# 현재 단어가 접두사가 아니라면 res 카운트
if not flag:
res += 1
print(res)
728x90
'ALGORITHM > 정렬, 탐색,구현' 카테고리의 다른 글
[백준 14503번] 파이썬 - 로봇 청소기 (0) | 2023.04.04 |
---|---|
[백준 20922번] 파이썬 - 겹치는 건 싫어 (0) | 2023.04.02 |
[백준 13335번] 파이썬 - 트럭 (0) | 2023.03.25 |
[백준 10655번] 파이썬 - 마라톤1 (0) | 2023.03.23 |
[백준 16918번] 파이썬 - 봄버맨 (0) | 2023.03.22 |