일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- DWG
- Python Code
- attribute
- 43. Multiply Strings
- 밴픽
- shiba
- Substring with Concatenation of All Words
- Generator
- t1
- LeetCode
- 컴퓨터의 구조
- Regular Expression
- 315. Count of Smaller Numbers After Self
- 715. Range Module
- 파이썬
- Protocol
- Python Implementation
- 109. Convert Sorted List to Binary Search Tree
- Convert Sorted List to Binary Search Tree
- concurrency
- Python
- 프로그래머스
- kaggle
- Decorator
- 운영체제
- 30. Substring with Concatenation of All Words
- 시바견
- Class
- iterator
- data science
Archives
- Today
- Total
Scribbling
LeetCode: 115. Distinct Subsequences 본문
1. 완전탐색
완전탐색으로 짜잔하고 풀리면 hard일리가 없지. 역시 Time Out
class Solution:
def numDistinct(self, s: str, t: str) -> int:
self.answer = 0
self.dfs(s, t)
return self.answer
def dfs(self, s, t):
if not t:
self.answer += 1
return
target = t[0]
for i, char in enumerate(s):
if char == target:
self.dfs(s[i+1:], t[1:])
2. DP
문자열을 탐색 혹은 비교하는 문제는 대부분 DP인 경우가 많다.
말그대로 dp다. 문제는 이것도 Time Out
class Solution:
def numDistinct(self, s: str, t: str) -> int:
dp = [[0] * (len(s)+1) for _ in range(len(t)+1)]
dp[0][0] = 1
for i in range(1, len(t)+1):
for j in range(1, len(s)+1):
if s[j-1] == t[i-1]:
for k in range(j):
dp[i][j] += dp[i-1][k]
return sum(dp[len(t)])
3. (2)의 개선
for문이 3중첩인게 영 마음에 안든다.
애초에 DP Table이 for문 2번으로 읽히도록 만들자.
class Solution:
def numDistinct(self, s: str, t: str) -> int:
dp = [[0] * (len(s)+1) for _ in range(len(t)+1)]
for i in range(len(s)+1):
dp[0][i] = 1
for i in range(1, len(t)+1):
for j in range(1, len(s)+1):
if s[j-1] == t[i-1]:
dp[i][j] = dp[i-1][j-1] + dp[i][j-1]
else:
dp[i][j] = dp[i][j-1]
return dp[len(t)][len(s)]
알고리즘은 아래 그림을 참고하면 된다.
통과인데 살짝 느리네... 더 좋은 방법이 있나?
'Computer Science > Coding Test' 카테고리의 다른 글
프로그래머스: 네트워크 (0) | 2021.10.31 |
---|---|
프로그래머스: 타겟 넘버 (0) | 2021.10.31 |
LeetCode: 113. Path Sum II (0) | 2021.10.27 |
LeetCode: 109. Convert Sorted List to Binary Search Tree (0) | 2021.10.27 |
프로그래머스: 도둑질 (0) | 2021.10.26 |