https://www.acmicpc.net/problem/11478
💡문제 분석 요약
문자열 S가 주어졌을 때, S의 서로 다른 부분 문자열의 개수를 구하는 프로그램을 작성하시오.
부분 문자열은 S에서 연속된 일부분을 말하며, 길이가 1보다 크거나 같아야 한다.
예를 들어, ababc의 부분 문자열은 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 있고, 서로 다른것의 개수는 12개이다.
💡알고리즘 설계
for문을 이용해 첫번째 문자로 시작하는 문자열, 두번째 문자로 시작하는 문자열 등을 순서대로 구하여 set에 추가한다. 중복처리를 위해 set을 이용하고, set의 크기에서 1을 뺀 값을 리턴한다.
💡코드
S= input()
len_S=len(S)
l=set()
for i in range(len_S):
for j in range(i, len_S):
l.add(S[i:j])
print(len(l)-1)
💡시간복잡도
N+(N-1)+(N-2)+...1.. 이므로 등차수열
💡 틀린 이유
#import sys
#input = sys.stdin.readline
#S= input()
#len_S=len(S)
#l=[]
#for i in range(len_S):
# for j in range(i, len_S):
# if S[i:j] not in l:
# l.append(S[i:j])
#print(len(l)-1)
중복처리를 not in l로 해서 시간초과가 났다. set을 이용해 해결함
💡 느낀점 or 기억할정보
l[0:0], l[1:1]은 공백 ' '이 반환된다.
'알고리즘 문제 풀이' 카테고리의 다른 글
[백준 16967] 배열 복원하기 - 파이썬 (0) | 2024.02.10 |
---|---|
[백준 11724] 연결 요소의 개수 - 파이썬 (0) | 2024.02.10 |
[백준 10816번] 숫자 카드2 - 파이썬 (0) | 2024.02.03 |
[백준 15649번] N과 M (1) - 파이썬 (0) | 2024.01.27 |
[백준 1697번] 숨바꼭질 - 파이썬 (1) | 2024.01.27 |