Programming/백준
[실버 1] 백준 1141 - 접두사 (파이썬)
pental
2025. 6. 24. 14:37
https://www.acmicpc.net/problem/1141
풀이
이 문제는 주어진 문자열들 중 다른 문자열의 접두사가 아닌 문자열의 개수를 세는 것이다.
N = int(input())
S = [input() for _ in range(N)]
S = list(set(S)) # 중복 제거
먼저 문자열 개수 N을 입력받고, 문자열 리스트 S를 구성한 뒤 set()을 이용해 중복 문자열을 제거한다.
prefix = [False] * N
prefix[i]는 S[i]가 다른 문자열의 접두사인지 여부를 저장하는 배열이다.
for i in range(len(S)) :
for j in range(len(S)) :
if i == j :
continue
if len(S[i]) >= len(S[j]) :
continue
if S[i] == S[j][:len(S[i])] :
prefix[i] = True
break
두 문자열을 비교하여, S[i]가 S[j]의 접두사인지 확인한다.
단 조건은 다음과 같다.
- 같은 인덱스는 패스한다.
- 자기보다 길거나 같은 문자열은 확인하지 않는다.
- 접두사인지 확인은 S[i] == S[j][:len(S)]로 한다.
접두사로 확인되면 prefix[i] = True로 설정하고 바로 break 한다.
count = 0
for i in range(len(S)) :
if not prefix[i] :
count += 1
접두사가 아닌 문자열 개수를 카운트한다.
코드
# 백준 1141 - 접두사
# 분류 : 문자열
N = int(input())
S = [input() for _ in range(N)]
S = list(set(S))
prefix = [False] * N
for i in range(len(S)) :
for j in range(len(S)) :
if i == j :
continue
if len(S[i]) >= len(S[j]) :
continue
if S[i] == S[j][:len(S[i])] :
prefix[i] = True
break
count = 0
for i in range(len(S)) :
if not prefix[i] :
count += 1
print(count)