Notice
Recent Posts
Recent Comments
Link
jyamethyst21 님의 블로그
백준 11478번- '서로 다른 부분 문자열의 개수' (PYTHON 풀이) 본문
문제:

해당 문제는 문자열 하나를 입력받았을 때 각 자리별로 쪼개서 출력하고 그 옆자리랑 더해서 출력하고... 이렇게 한번씩 쭉 돌아서 마지막엔 문자열 전체를 출력하는 반복문에서 중복된 것을 제외한 나머지의 개수를 출력하는 문제이다.
예시가 잘 나와있어서 추가로 설명하진 않겠다.
풀이:
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에 집어넣는다. 당연히 집합이라 중복은 없고 이에 대한 길이를 그대로 출력해주면 문제는 쉽게 풀 수 있다.
파이썬의 장점 중 하나가 다른 언어보다 간결하다는 것인데 파이썬을 쓸수록 코드가 길어지는 게.. 이 장점을 잘 활용하지 못하고 있는 것 같다.. 개선해야할 것 같다..!
'CODING 💻' 카테고리의 다른 글
| 백준 28278번- '스택 2' (PYTHON 풀이) (0) | 2025.10.20 |
|---|---|
| 백준 1436번- '영화감독 숌' (PYTHON 풀이) (0) | 2025.10.19 |
| 백준 1269번- '대칭 차집합' (PYTHON 풀이) (0) | 2025.10.17 |
| 백준 10816번- '숫자 카드 2' (PYTHON 풀이) (0) | 2025.10.16 |
| 백준 1764번- '듣보잡' (PYTHON 풀이, 문제 해석 O) (0) | 2025.10.15 |
