티스토리 뷰

https://www.acmicpc.net/problem/11478

 

11478번: 서로 다른 부분 문자열의 개수

첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다.

www.acmicpc.net

실버3 문제, 골드5 이하 문제는 매우 쉬운편에 속하는 문제들이라고 생각한다.

 
from sys import stdin

string = stdin.readline().strip()
substring_set = set()

for CurSubstringLength in range(1, len(string)+1):
    for StartIndex in range(len(string)):
        if StartIndex + CurSubstringLength <= len(string):
            # print(string[StartIndex:StartIndex+i])
            substring_set.add(string[StartIndex:StartIndex+CurSubstringLength])

print(len(substring_set))

CurSubstringLength는 부분 문자열의 길이다. 예를들어 1이라면 ababc의 부분문자열들은 a, b, a, b, c이고 2라면 ab, ba, ab, bc가 되겠다.

StartIndex는 각각의 부분 문자열의 길이에 따라 출력할 부분 문자열들의 시작 인덱스다.

Start Index 0 1 2 3 4
부분 문자열의 길이          
1 a b a b c
2 ab ba ab bc 범위 초과
3 aba bab abc 범위초과 범위 초과
4 abab babc 범위 초과 범위 초과 범위 초과
5 ababc 범위 초과 범위 초과 범위 초과 범위 초과

범위가 초과되는 경우를 출력하면 분명 오답을 볼 것 같아서 애초에 출력시키지 않기 위해 

if StartIndex + CurSubstringLength <= len(string):

라인을 추가하였다. 

댓글