jyamethyst21 님의 블로그

백준 11478번- '서로 다른 부분 문자열의 개수' (PYTHON 풀이) 본문

CODING 💻

백준 11478번- '서로 다른 부분 문자열의 개수' (PYTHON 풀이)

jyamethyst21 2025. 10. 18. 04:23

문제:

 

해당 문제는 문자열 하나를 입력받았을 때 각 자리별로 쪼개서 출력하고 그 옆자리랑 더해서 출력하고... 이렇게 한번씩 쭉 돌아서 마지막엔 문자열 전체를 출력하는 반복문에서 중복된 것을 제외한 나머지의 개수를 출력하는 문제이다.

예시가 잘 나와있어서 추가로 설명하진 않겠다.

 

풀이:

S =input()
total=set() 

for i in range(len(S)): 
    for j in range(i,len(S)): 
    	total.add(S[i:j+1])
        
print(len(total))

이중 for문 쓰면 시간초과 뜰까봐 애써서 코드 짜다가 어떻게 해도 코드가 너무 길어져서 구글 서치를 진행했다. 살펴보니 문자열 슬라이싱을 써서 풀면 쉬워서 그대로 진행하였다.

위 코드에서 S[i:j+1] 부분은 문자열 슬라이싱인데 for문을 돌면서 모든 경우의 수로 슬라이싱을 진행해준다.

 

예를 들어 S = "ababc"일 때,

  • i=0 → j=0 → 'a'
  • i=0 → j=1 → 'ab'
  • i=0 → j=2 → 'aba'
  • i=0 → j=3 → 'abab'
  • i=0 → j=4 → 'ababc'
  • i=1 → j=1 → 'b'
  • i=1 → j=2 → 'ba'

위와 같은 순서로 진행이 되고 슬라이싱된 새로운 문자를 add를 통해 집합 타입인 total에 집어넣는다. 당연히 집합이라 중복은 없고 이에 대한 길이를 그대로 출력해주면 문제는 쉽게 풀 수 있다.

 

파이썬의 장점 중 하나가 다른 언어보다 간결하다는 것인데 파이썬을 쓸수록 코드가 길어지는 게.. 이 장점을 잘 활용하지 못하고 있는 것 같다.. 개선해야할 것 같다..!