백준

[백준-Python] 서로 다른 부분 문자열의 개수 : 11478번

Yuuuki 2024. 5. 30. 21:40

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

s=input()
s_set=set()

#모든 조합을 set에 넣어 중복제거 (i=1~문자열 길이)
for i in range(len(s)): 
    for j in range(i,len(s)):
        s_set.add(s[i:j+1])

print(len(s_set))

 

처음에 조합문제를 보고 collections를 써봐야하나 했지만, 중복된 문자열의 조합까지 생성해버리기 때문에 

다른 방법을 생각해보다가 set을 사용하였다

 

💡 해결과정

모든조합을 이중 for문을 사용해  set 자료구조에 넣어준다

 

 

for i in range(len(s)): 
    for j in range(i,len(s)):
        s_set.add(s[i:j+1])

모든조합을 위해 처음엔, i를 1부터 len까지 i개로 이루어진 조합으로 만들어나갈까 했지만 복잡해지므로...

두개의 포인터를 이용해 j는 i+1로 시작하며, 포인터를 이동해가면서 조합을 만들어나가는 방식으로 풀었당

 

❗️인덱스 슬라이싱으로는 범위를 벗어나도 오류가 발생하지 않는다.

 

 

 

 

 

collections를 사용한 풀이

https://janghan-kor.tistory.com/182

 

[백준] #11478 서로 다른 부분 문자열의 개수 python

https://www.acmicpc.net/problem/11478 11478번: 서로 다른 부분 문자열의 개수 첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다. www.acmicpc.net 📕 설명 📕 itertools

janghan-kor.tistory.com