728x90
import sys
string = sys.stdin.readline().rstrip()
res = set() #1
for i in range(len(string)):
for j in range(i, len(string)): #2
res.add(string[i:j+1]) #3
print(len(res))
#1 : 서로 중복되는 부분을 자동으로 제거해 주기 위해 .set() 생성자 이용
#2 : 1자리 부터 string의 길이까지 하나하나 자르기 위해 range(i, len(string))로 설정
#3 : 인덱스 슬라이싱이 [a:b]이면 a부터 b-1까지인것을 생각해서 j+1로 설정.
처음 i = 0, j = 0일때 [0:0]이 되서 한자리 문자가 잘려나오지 못하므로 j+1로 [0:1]로 만들어줌.
for j in range(i+1, len(string))으로 설정하면 i가 마지막일때 즉 예제 ababc에선 인덱스 4일때는 j가 반복을 해주지 못해서 마지막 원소인 c를 set에 넣어주지 못한다.
ababc를 하나하나 반복문 돌려서 찾아주면 다음과 같다.
a, ab, aba, abab, ababc, b, ba, bab, babc, a, ab, abc, b, bc, c
set()으로 중복을 잡아주면 서로 다른 원소는 12개가 된다.
리스트와 다르게 집합의 원소추가는 append()가 아니라 add()다.
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 1927 파이썬(python) : 최소 힙 (0) | 2022.06.19 |
---|---|
[백준] 11279 파이썬(python) : 최대 힙 (0) | 2022.06.19 |
[백준] 1269 파이썬(python) : 대칭 차집합 (0) | 2022.06.18 |
[백준] 1764 파이썬(python) : 듣보잡 - (★) (0) | 2022.06.18 |
[백준] 1620 파이썬(python) : 나는야 포켓몬 마스터 이다솜 (0) | 2022.06.17 |