백준 | 11478

justhaza.log·2024년 5월 25일

알고리즘: BOJ

목록 보기
61/125

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


알파벳 소문자로만 이루어진, 길이 1,000 이하의 문자열이 하나 주어진다.
이때 주어진 문자열의 서로 다른 부분 문자열의 개수를 구하는 문제이다.


중복되는 부분 문자열은 길이가 같은 부분 문자열에서만 나올 수 있는데,
이러한 케이스를 조건문으로 처리할 수도 있겠다는 생각을 했다.

근데 반복문으로 모든 부분 문자열을 다 구한 다음,
set() 변환을 통해 중복을 제거하고 갯수를 출력하는 게 더 깔끔한 풀이인 것 같아서..

그리고 시간 복잡도에 걸리지 않기 때문에 이렇게 짰다.


코드(정답)는 다음과 같다.

import sys


s = sys.stdin.readline().rstrip()

# i: 문자열 길이, j: 부분 문자열의 시작 인덱스
sub_str = []
for i in range(len(s)):
    for j in range(len(s) - i):
        sub_str.append(s[j:j + i + 1])

print(len(set(sub_str)))
profile
알고리즘이나 SQL 문제 풀이를 올리고 있습니다. 피드백 환영합니다!

0개의 댓글