diff --git a/3sum/sejineer.py b/3sum/sejineer.py new file mode 100644 index 000000000..21c048506 --- /dev/null +++ b/3sum/sejineer.py @@ -0,0 +1,24 @@ +""" +시간 복잡도: O(N^2) +공간 복잡도: O(N) +""" +class Solution: + def threeSum(self, nums: List[int]) -> List[List[int]]: + nums.sort() + + result = set() + + for i in range(len(nums) - 2): + start, end = i + 1, len(nums) - 1 + while start < end: + temp = nums[i] + nums[start] + nums[end] + if temp == 0: + result.add((nums[i], nums[start], nums[end])) + start += 1 + end -= 1 + elif temp < 0: + start += 1 + else: + end -= 1 + + return list(result) diff --git a/climbing-stairs/sejineer.py b/climbing-stairs/sejineer.py new file mode 100644 index 000000000..8f264a9df --- /dev/null +++ b/climbing-stairs/sejineer.py @@ -0,0 +1,13 @@ +""" +시간 복잡도: O(N) +공간 복잡도: O(N) +""" +class Solution: + def climbStairs(self, n: int) -> int: + dp = [0] * 46 + dp[1], dp[2] = 1, 2 + + for i in range(3, n + 1): + dp[i] = dp[i - 1] + dp[i - 2] + + return dp[n] diff --git a/product-of-array-except-self/sejineer.py b/product-of-array-except-self/sejineer.py new file mode 100644 index 000000000..ce30b10e4 --- /dev/null +++ b/product-of-array-except-self/sejineer.py @@ -0,0 +1,19 @@ +""" +시간 복잡도: O(N) +공간 복잡도: O(N) +""" +class Solution: + def productExceptSelf(self, nums: List[int]) -> List[int]: + prefix = [1] * len(nums) + for i in range(len(nums) - 1): + prefix[i + 1] = prefix[i] * nums[i] + + suffix = [1] * len(nums) + for i in range(len(nums) - 1, 0, -1): + suffix[i - 1] = suffix[i] * nums[i] + + result = [] + for i, j in zip(prefix, suffix): + result.append(i * j) + + return result diff --git a/valid-anagram/sejineer.py b/valid-anagram/sejineer.py new file mode 100644 index 000000000..22bb2fc04 --- /dev/null +++ b/valid-anagram/sejineer.py @@ -0,0 +1,26 @@ +""" +시간 복잡도: O(N) +공간 복잡도: O(N) + +코드 가독성 개선 코드: +from collections import Counter + +class Solution: + def isAnagram(self, s: str, t: str) -> bool: + return Counter(s) == Counter(t) +""" +from collections import Counter + +class Solution: + def isAnagram(self, s: str, t: str) -> bool: + if len(s) != len(t): + return False + + s_counter = Counter(s) + t_counter = Counter(t) + + for num, freq in t_counter.items(): + if s_counter[num] != freq: + return False + + return True diff --git a/validate-binary-search-tree/sejineer.py b/validate-binary-search-tree/sejineer.py new file mode 100644 index 000000000..0eed6a8c5 --- /dev/null +++ b/validate-binary-search-tree/sejineer.py @@ -0,0 +1,24 @@ +""" +시간 복잡도: O(N) +공간 복잡도: O(N) +""" +class Solution: + def isValidBST(self, root: Optional[TreeNode]) -> bool: + num_list = [] + + def dfs(node: TreeNode): + if not node: + return + + dfs(node.left) + num_list.append(node.val) + dfs(node.right) + + dfs(root) + + mem = num_list[0] + for i in range(1, len(num_list)): + if mem >= num_list[i]: + return False + mem = num_list[i] + return True