본문 바로가기

알고리즘/python

[python/파이썬] 백준 11478 서로 다른 부분 문자열의 개수

반응형

[문제 출처]

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

 

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

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

www.acmicpc.net

 

 

[문제 풀이]

주어진 문자열이 있을 때 해당 문자열의 부분 문자열의 개수를 구하는 문제이다.

처음 접근을 할 때는 길이가 1인 부분 문자열, 2인 부분 문자열과 같이 길이에 초점을 맞춰 문제를 해결하려고 했으나 복잡해져서 좀처럼 실마리가 보이지 않았다.

그래서 다른 코드를 참고해보니 길이가 아닌 부분 문자열의 시작부분에 초점을 맞춰야 간단하게 풀 수 있는 문제였다.

문제를 해석하고 답을 찾으려고 할 때 끝까지 잡고 푸는 것도 중요하지만 적절한 판단을 통해 다른 방향으로 바꾸는 것 또한 중요한 것 같다.

 

 

이중 for문을 통해 부분 문자열을 구하는 코드이다.

바깥쪽 for문에서는 주어진 문자열에서 부분 문자열이 시작되는 부분을 지정해주고,

안쪽 for문에서는 i번째부터 시작해서 길이가 1인 부분 문자열, 2인 부분 문자열... 등을 구한다.

data = input()

result = set()
for i in range(len(data)):
    for j in range(i, len(data)):
        result.add(data[i:j+1])

print(len(result))
반응형