Skip to content

Commit 9ae8457

Browse files
authored
Merge pull request #414 from kjb512/main
[kayden] Week 04 Solutions
2 parents 8301385 + 570eaeb commit 9ae8457

File tree

5 files changed

+120
-0
lines changed

5 files changed

+120
-0
lines changed

longest-common-subsequence/kayden.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# 시간복잡도: O(N)
2+
# 공간복잡도: O(N)
3+
class Solution:
4+
def longestConsecutive(self, nums: List[int]) -> int:
5+
nums = set(nums)
6+
answer = 0
7+
8+
for num in nums:
9+
if num - 1 not in nums:
10+
length = 1
11+
12+
while num + length in nums:
13+
length += 1
14+
15+
answer = max(answer, length)
16+
17+
return answer

maximum-product-subarray/kayden.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# 시간복잡도: O(N)
2+
# 공간복잡도: O(1)
3+
class Solution:
4+
def maxProduct(self, nums: List[int]) -> int:
5+
n = len(nums)
6+
positive, negative = 0, 0
7+
8+
if nums[0] > 0:
9+
positive = nums[0]
10+
else:
11+
negative = nums[0]
12+
13+
answer = max(nums)
14+
15+
for i in range(1, n):
16+
if nums[i] >= 0:
17+
positive *= nums[i]
18+
negative *= nums[i]
19+
20+
if positive == 0:
21+
positive = nums[i]
22+
23+
else:
24+
temp = positive
25+
positive = negative * nums[i]
26+
negative = temp * nums[i]
27+
28+
if negative == 0:
29+
negative = nums[i]
30+
31+
answer = max(answer, positive)
32+
33+
return answer

missing-number/kayden.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# 시간복잡도: O(N)
2+
# 공간복잡도: O(1)
3+
class Solution:
4+
def missingNumber(self, nums: List[int]) -> int:
5+
n = len(nums)
6+
total = n*(n+1)//2
7+
return total - sum(nums)

valid-palindrome/kayden.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# 시간복잡도: O(N)
2+
# 공간복잡도: O(N)
3+
class Solution:
4+
5+
def isPalindrome(self, s: str) -> bool:
6+
string = ""
7+
8+
for letter in s:
9+
if letter.isalnum(): # if ('a' <= char <= 'z') or ('A' <= char <= 'Z') or ('0' <= char <= '9'):
10+
string += letter.lower()
11+
12+
13+
def valid(s):
14+
start, end = 0, len(s)-1
15+
16+
while start < end:
17+
if s[start] != s[end]:
18+
return False
19+
20+
start += 1
21+
end -= 1
22+
23+
return True
24+
25+
return valid(string)

word-search/kayden.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# 시간복잡도: O(N*M*4^limit) limit: word의 길이
2+
# 공간복잡도: O(N*M)
3+
class Solution:
4+
def exist(self, board: List[List[str]], word: str) -> bool:
5+
m = len(board)
6+
n = len(board[0])
7+
limit = len(word)
8+
visited = [[False for _ in range(n)] for _ in range(m)]
9+
dx = [0, 0, -1, 1]
10+
dy = [-1, 1, 0, 0]
11+
12+
target = 0
13+
14+
def dfs(x, y, idx):
15+
16+
if idx == limit - 1:
17+
return True
18+
19+
for i in range(4):
20+
nx, ny = x + dx[i], y + dy[i]
21+
22+
if 0 <= nx < m and 0 <= ny < n and not visited[nx][ny] and board[nx][ny] == word[idx + 1]:
23+
visited[nx][ny] = True
24+
if dfs(nx, ny, idx + 1):
25+
return True
26+
visited[nx][ny] = False
27+
28+
return False
29+
30+
for i in range(m):
31+
for j in range(n):
32+
if board[i][j] == word[target]:
33+
visited[i][j] = True
34+
if dfs(i, j, 0):
35+
return True
36+
visited[i][j] = False
37+
38+
return False

0 commit comments

Comments
 (0)