새소식

⌨️ Algorithms/백준

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

2023. 6. 17. 21:33

  • -

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

 

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

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

www.acmicpc.net

 

  • 문자열 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초
  • 메모리 제한: 512 MB

 

"""
입출력 예시)

ababc -> 12
"""

 

 

## 의사코드 ##

# 서로 달라야 함
# set()

# 부분 문자열
# for i in range(len(string)):
#     for j in range(i, len(string)):
          #i번째 문자부터 부분문자열 구하기
#         li.add(string[i:j+1])

 

 

 

 

string = input()
li = set()

for i in range(len(string)):
    for j in range(i, len(string)):
        #i번째 문자부터 부분문자열 구하기
        li.add(string[i:j+1])

print(len(li))

 

 

  • 과정 확인
"""
a 

{'a'} 

--------------------------------------------------
ab 

{'a', 'ab'} 

--------------------------------------------------
aba 

{'a', 'aba', 'ab'} 

--------------------------------------------------
abab 

{'a', 'aba', 'ab', 'abab'} 

--------------------------------------------------
ababc 

{'aba', 'ab', 'ababc', 'abab', 'a'} 

--------------------------------------------------
b 

{'aba', 'ab', 'ababc', 'abab', 'b', 'a'} 

--------------------------------------------------
ba 

{'aba', 'ba', 'ab', 'ababc', 'abab', 'b', 'a'} 

--------------------------------------------------
bab 

{'aba', 'ba', 'ab', 'ababc', 'abab', 'bab', 'b', 'a'} 

--------------------------------------------------
babc 

{'babc', 'aba', 'ba', 'ab', 'ababc', 'abab', 'bab', 'b', 'a'} 

--------------------------------------------------
a 

{'babc', 'aba', 'ba', 'ab', 'ababc', 'abab', 'bab', 'b', 'a'} 

--------------------------------------------------
ab 

{'babc', 'aba', 'ba', 'ab', 'ababc', 'abab', 'bab', 'b', 'a'} 

--------------------------------------------------
abc 

{'babc', 'aba', 'ba', 'ab', 'ababc', 'abc', 'abab', 'bab', 'b', 'a'} 

--------------------------------------------------
b 

{'babc', 'aba', 'ba', 'ab', 'ababc', 'abc', 'abab', 'bab', 'b', 'a'} 

--------------------------------------------------
bc 

{'babc', 'aba', 'ba', 'ab', 'ababc', 'abc', 'abab', 'bab', 'b', 'bc', 'a'} 

--------------------------------------------------
c 

{'babc', 'aba', 'ba', 'c', 'ab', 'ababc', 'abc', 'abab', 'bab', 'b', 'bc', 'a'} 

--------------------------------------------------
"""

 

 

 

 

 

 

https://velog.io/@yj_lee/%EB%B0%B1%EC%A4%80-11478%EB%B2%88-%EC%84%9C%EB%A1%9C-%EB%8B%A4%EB%A5%B8-%EB%B6%80%EB%B6%84-%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%98-%EA%B0%9C%EC%88%98-%ED%8C%8C%EC%9D%B4%EC%8D%AC

 

[백준] 11478번 : 서로 다른 부분 문자열의 개수 (파이썬)

접근 방법이중 반복문으로 문자열의 부분 문자열을 구한다.구한 부분 문자열을 빈 집합에 추가하여 len으로 길이를 구해 출력해준다.

velog.io

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다!