File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ #
2+
3+ '''
4+ 1. 아이디어 :
5+ s[left:right+1] 구간을 출력하는 최소 횟수
6+ "aba"를 보면:
7+ dp[0][2] = 1 + dp[1][2] = 3
8+
9+ s[0] == s[2]이므로
10+ dp[0][2] = dp[1][1] + dp[2][2]
11+ = 1 + 1
12+ = 2
13+
14+ 2. 시간복잡도 :
15+ O(n**2)
16+
17+ 3. 자료구조/알고리즘 :
18+ dp
19+
20+ '''
21+
22+ class Solution :
23+ def strangePrinter (self , s : str ) -> int :
24+ n = len (s )
25+
26+ # dp[left][right]:
27+ # s[left:right + 1]을 출력하는 최소 횟수
28+ dp = [[0 ] * n for _ in range (n )]
29+
30+ for i in range (n ):
31+ dp [i ][i ] = 1
32+
33+ # 짧은 구간부터 계산
34+ for length in range (2 , n + 1 ):
35+ for left in range (n - length + 1 ):
36+ right = left + length - 1
37+
38+ # s[left]를 별도로 한 번 출력
39+ dp [left ][right ] = 1 + dp [left + 1 ][right ]
40+
41+ # s[left]와 같은 문자를 출력하는 턴에 같이 처리
42+ for k in range (left + 1 , right + 1 ):
43+ if s [left ] == s [k ]:
44+ middle = dp [left + 1 ][k - 1 ] if left + 1 <= k - 1 else 0
45+
46+ dp [left ][right ] = min (
47+ dp [left ][right ],
48+ middle + dp [k ][right ]
49+ )
50+
51+ return dp [0 ][n - 1 ]
You can’t perform that action at this time.
0 commit comments