11478번: 서로 다른 부분 문자열의 개수
첫째 줄에 문자열 S가 주어진다. S는 알파벳 소문자로만 이루어져 있고, 길이는 1,000 이하이다.
www.acmicpc.net
내가 작성한 코드 - 풀이 참고하여 풀었다ㅠ
import sys
input = sys.stdin.readline
s = input().rstrip()
result = []
for i in range(len(s)):
for j in range(i+1, len(s)+1):
result.append(s[i:j])
print(len(set(result)))
주의해야할점 (1) 인덱싱은 -1
for 문의 range 처럼 인덱싱은 끝숫자-1 까지 인덱싱 되기 때문에 이 점도 참고하여 중첩 for문에 range를 +1 을 해야한다.
주의해야할점 (2) 빈문자열 포함되기에 i+1 로 시작해야함
vscode에서 출력해보니 result 리스트 안에 빈 문자열도 포함되어있는 것을 확인하였다.
그래서 중첩 for문의 시작지점을 i+1 로 작성하였다.
새롭게 알게 된 것 : 집합 set
아예 처음부터 set 변수를 선언하여 이 set 안에 요소들을 추가하며 구현할 수 있다는 것을 알게되었다.
#리스트 선언 대신 set 변수 선언
result = set()
#for문 마지막 줄에는
result.add(s[i:j])
'🧩 Programming Languages > Python CodingTest' 카테고리의 다른 글
백준 1735번(silver 3) : 분수 합 (0) | 2024.01.26 |
---|---|
백준 1934번(bronze 1) : 최소공배수 (math 라이브러리 활용) (0) | 2024.01.26 |
백준 1269번(silver 4) : 대칭 차집합 (두 리스트 간 집합 구하기) (0) | 2024.01.23 |
백준 1764번(silver 4) : 듣보잡 문제 (리스트 교집합 & , join) (2) | 2024.01.22 |
백준 10816번(silver 4) : 숫자 카드 2 - 딕셔너리 (0) | 2024.01.22 |