diff --git a/longest-common-subsequence/kayden.py b/longest-common-subsequence/kayden.py new file mode 100644 index 000000000..d43456d11 --- /dev/null +++ b/longest-common-subsequence/kayden.py @@ -0,0 +1,17 @@ +# 시간복잡도: O(N) +# 공간복잡도: O(N) +class Solution: + def longestConsecutive(self, nums: List[int]) -> int: + nums = set(nums) + answer = 0 + + for num in nums: + if num - 1 not in nums: + length = 1 + + while num + length in nums: + length += 1 + + answer = max(answer, length) + + return answer diff --git a/maximum-product-subarray/kayden.py b/maximum-product-subarray/kayden.py new file mode 100644 index 000000000..d5b66cc24 --- /dev/null +++ b/maximum-product-subarray/kayden.py @@ -0,0 +1,33 @@ +# 시간복잡도: O(N) +# 공간복잡도: O(1) +class Solution: + def maxProduct(self, nums: List[int]) -> int: + n = len(nums) + positive, negative = 0, 0 + + if nums[0] > 0: + positive = nums[0] + else: + negative = nums[0] + + answer = max(nums) + + for i in range(1, n): + if nums[i] >= 0: + positive *= nums[i] + negative *= nums[i] + + if positive == 0: + positive = nums[i] + + else: + temp = positive + positive = negative * nums[i] + negative = temp * nums[i] + + if negative == 0: + negative = nums[i] + + answer = max(answer, positive) + + return answer diff --git a/missing-number/kayden.py b/missing-number/kayden.py new file mode 100644 index 000000000..8a11721c6 --- /dev/null +++ b/missing-number/kayden.py @@ -0,0 +1,7 @@ +# 시간복잡도: O(N) +# 공간복잡도: O(1) +class Solution: + def missingNumber(self, nums: List[int]) -> int: + n = len(nums) + total = n*(n+1)//2 + return total - sum(nums) diff --git a/valid-palindrome/kayden.py b/valid-palindrome/kayden.py new file mode 100644 index 000000000..e41f48ade --- /dev/null +++ b/valid-palindrome/kayden.py @@ -0,0 +1,25 @@ +# 시간복잡도: O(N) +# 공간복잡도: O(N) +class Solution: + + def isPalindrome(self, s: str) -> bool: + string = "" + + for letter in s: + if letter.isalnum(): # if ('a' <= char <= 'z') or ('A' <= char <= 'Z') or ('0' <= char <= '9'): + string += letter.lower() + + + def valid(s): + start, end = 0, len(s)-1 + + while start < end: + if s[start] != s[end]: + return False + + start += 1 + end -= 1 + + return True + + return valid(string) diff --git a/word-search/kayden.py b/word-search/kayden.py new file mode 100644 index 000000000..4f342efc5 --- /dev/null +++ b/word-search/kayden.py @@ -0,0 +1,38 @@ +# 시간복잡도: O(N*M*4^limit) limit: word의 길이 +# 공간복잡도: O(N*M) +class Solution: + def exist(self, board: List[List[str]], word: str) -> bool: + m = len(board) + n = len(board[0]) + limit = len(word) + visited = [[False for _ in range(n)] for _ in range(m)] + dx = [0, 0, -1, 1] + dy = [-1, 1, 0, 0] + + target = 0 + + def dfs(x, y, idx): + + if idx == limit - 1: + return True + + for i in range(4): + nx, ny = x + dx[i], y + dy[i] + + if 0 <= nx < m and 0 <= ny < n and not visited[nx][ny] and board[nx][ny] == word[idx + 1]: + visited[nx][ny] = True + if dfs(nx, ny, idx + 1): + return True + visited[nx][ny] = False + + return False + + for i in range(m): + for j in range(n): + if board[i][j] == word[target]: + visited[i][j] = True + if dfs(i, j, 0): + return True + visited[i][j] = False + + return False