1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
import sys
sys.setrecursionlimit(10 ** 8)
input = lambda: sys.stdin.readline().rstrip()
arr = input()
N = len(arr)
p = [[0] * N for _ in range(N)]
dp = [N] * (N + 1)
for i in range(N): # 1개짜리 문자열
p[i][i] = 1
for i in range(N - 1): # 2개짜리 문자열
if arr[i] == arr[i + 1]: p[i][i + 1] = 1
for interval in range(2, N): # 3 이상 문자열
for start in range(N - interval):
end = start + interval
if arr[start] == arr[end] and p[start + 1][end - 1] == 1:
p[start][end] = 1
# 여기까진 BOJ 10942와 동일
dp[0] = 0
for end in range(1, N + 1):
for start in range(1, end + 1):
if p[start - 1][end - 1]: # 펠린드롬일 경우
dp[end] = min(dp[end], dp[start - 1] + 1)
print(dp[N])
|
cs |
반응형
'알고리즘 > 문제풀이' 카테고리의 다른 글
[구현] BOJ 21608 상어 초등학교 (0) | 2023.08.08 |
---|---|
[DP] BOJ 10942 펠린드롬? (0) | 2023.08.01 |
[이분탐색] BOJ 1477 휴게소 세우기 (0) | 2023.07.31 |
[수학] BOJ 1111 IQ Test (0) | 2023.07.20 |
[BFS] BOJ 13859 숨바꼭질 3 (0) | 2023.07.20 |