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

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

문제

문자열 S가 주어졌을 때, S의 서로 다른 부분 문자열의 개수를 구하는 프로그램을 작성하시오.

부분 문자열은 S에서 연속된 일부분을 말하며, 길이가 1보다 크거나 같아야 한다.

예를 들어, ababc의 부분 문자열은 a, b, a, b, c, ab, ba, ab, bc, aba, bab, abc, abab, babc, ababc가 있고, 서로 다른것의 개수는 12개이다.

입력

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

출력

첫째 줄에 S의 서로 다른 부분 문자열의 개수를 출력한다.

예제 입력 1

ababc

예제 출력 1

12


해결할 방법을 생각해보자.💡

문자열들을 조합한 모든 경우의 수를 따진 후에 중복되는 것들을 삭제한 후의 개수를 출력하는 문제다. 문자열을 받아주자. sys.stdin.readline()을 사용해서 입력받을 때는 뒤에 개행문자가 포함되어있는 것을 주의하여 슬라이싱까지 해주자.

import sys

S = sys.stdin.readline()[:-1]

모든 조합의 경우를 담아줄 리스트와, 1을 담아줄 변수하나를 생성해주자.

all_case = []
length = 1

예제와 같이 ababc를 입력했을 경우에는 길이가 1인 문자열부터 5인 문자열까지 존재한다. 그래서 length를 가지고 그 길이만큼의 케이스를 구하는 식으로 접근할 것이고, while문을 이용했다. 그 안에서는 문자열의 길이만큼 for문을 돌려주었고, 슬라이싱에서 현재 자신의 위치부터 +length를 이용해서 골고루 모든 케이스를 접근할 수 있게끔 코드를 짰다.

while length <= len(S):
    for i in range(len(S)):
        all_case.append(s[i:i+length])

    length += 1

그리고 마지막엔 set()를 사용해서 중복되는 값들을 날려주고 그 길이를 출력해주는 식으로 문제를 해결했다!

print(len(set(all_case)))

코드 💻

import sys

S = sys.stdin.readline()[:-1]

all_case = []
length = 1

while length <= len(S):
    for i in range(len(S)):
        all_case.append(S[i:i+length])

    length += 1

print(len(set(all_case)))

해결 로그

문제 푼 날짜 체크
2022-07-18
   
   
   
   

2022

[web]jQuery 복습 3

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

13 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

14 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

5 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

10 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

8 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑