From 864182b554ee6dcb1a12fdfc67cc0e9b9c6efbea Mon Sep 17 00:00:00 2001 From: krokerdile Date: Mon, 7 Apr 2025 13:56:47 +0900 Subject: [PATCH 1/6] valid-anagram solution --- valid-anagram/krokerdile.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 valid-anagram/krokerdile.py diff --git a/valid-anagram/krokerdile.py b/valid-anagram/krokerdile.py new file mode 100644 index 000000000..63b38aa54 --- /dev/null +++ b/valid-anagram/krokerdile.py @@ -0,0 +1,13 @@ +class Solution: + def isAnagram(self, s: str, t: str) -> bool: + a = {} + b = {} + + if len(s) != len(t): + return False + + for i in range(len(s)): + a[s[i]] = a.get(s[i], 0) + 1 + b[t[i]] = b.get(t[i], 0) + 1 + + return a == b From f34b332632f34c86672222139853acf92624646a Mon Sep 17 00:00:00 2001 From: krokerdile Date: Tue, 8 Apr 2025 16:24:33 +0900 Subject: [PATCH 2/6] clibing-stairs solution --- climbing-stairs/krokerdile.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 climbing-stairs/krokerdile.py diff --git a/climbing-stairs/krokerdile.py b/climbing-stairs/krokerdile.py new file mode 100644 index 000000000..8473aeb81 --- /dev/null +++ b/climbing-stairs/krokerdile.py @@ -0,0 +1,10 @@ +class Solution: + def climbStairs(self, n: int) -> int: + one, two = 1,1 + + for i in range(n-1): + temp = one; + one = one + two; + two = temp; + + return one; From 169131098e446901a094b61116cab19f030db204 Mon Sep 17 00:00:00 2001 From: krokerdile Date: Wed, 9 Apr 2025 12:58:18 +0900 Subject: [PATCH 3/6] product-of-array-except-selt solution --- product-of-array-except-self/krokerdile.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 product-of-array-except-self/krokerdile.py diff --git a/product-of-array-except-self/krokerdile.py b/product-of-array-except-self/krokerdile.py new file mode 100644 index 000000000..669a609b6 --- /dev/null +++ b/product-of-array-except-self/krokerdile.py @@ -0,0 +1,18 @@ +class Solution: + def productExceptSelf(self, nums: List[int]) -> List[int]: + n = len(nums) + answer = [1] * n + + # 1. 왼쪽 곱 저장 + left_product = 1 + for i in range(n): + answer[i] = left_product + left_product *= nums[i] + + # 2. 오른쪽 곱을 곱해주기 + right_product = 1 + for i in reversed(range(n)): + answer[i] *= right_product + right_product *= nums[i] + + return answer From 2dfdd37b5c7997053f6247acb8b682f9e7012e9a Mon Sep 17 00:00:00 2001 From: krokerdile Date: Fri, 11 Apr 2025 19:40:11 +0900 Subject: [PATCH 4/6] 3 Sum solution --- 3sum/krokerdile.py | 58 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 3sum/krokerdile.py diff --git a/3sum/krokerdile.py b/3sum/krokerdile.py new file mode 100644 index 000000000..f3b10ff78 --- /dev/null +++ b/3sum/krokerdile.py @@ -0,0 +1,58 @@ +class Solution: + def threeSum(self, nums: List[int]) -> List[List[int]]: + nums.sort() + res = [] + n = len(nums) + + for i in range(n): + if i > 0 and nums[i] == nums[i-1]: + continue + + target = -nums[i] + seen = set() + j = i + 1 + + while j < n: + complement = target - nums[j] + if complement in seen: + res.append([nums[i], complement, nums[j]]) + while j + 1 < n and nums[j] == nums[j+1]: + j += 1 + seen.add(nums[j]) + j += 1 + return list(set(tuple(x) for x in res)) + + +class Solution: + def threeSum(self, nums: List[int]) -> List[List[int]]: + nums.sort() + result = [] + + for i in range(len(nums)): + # 중복된 첫 번째 수는 skip + if i > 0 and nums[i] == nums[i - 1]: + continue + + left, right = i + 1, len(nums) - 1 + + while left < right: + total = nums[i] + nums[left] + nums[right] + + if total == 0: + result.append([nums[i], nums[left], nums[right]]) + + # 중복된 두 번째, 세 번째 수 건너뛰기 + while left < right and nums[left] == nums[left + 1]: + left += 1 + while left < right and nums[right] == nums[right - 1]: + right -= 1 + + left += 1 + right -= 1 + + elif total < 0: + left += 1 # 합이 작으면 왼쪽을 오른쪽으로 + else: + right -= 1 # 합이 크면 오른쪽을 왼쪽으로 + + return result From 3191122403f22e6c9bd6cf98bdc1b786d9bfeb53 Mon Sep 17 00:00:00 2001 From: krokerdile Date: Fri, 11 Apr 2025 19:43:06 +0900 Subject: [PATCH 5/6] validate-binary-search-tree solution --- validate-binary-search-tree/krokerdile.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 validate-binary-search-tree/krokerdile.py diff --git a/validate-binary-search-tree/krokerdile.py b/validate-binary-search-tree/krokerdile.py new file mode 100644 index 000000000..c6e85efc4 --- /dev/null +++ b/validate-binary-search-tree/krokerdile.py @@ -0,0 +1,16 @@ +class Solution: + def isValidBST(self, root: Optional[TreeNode]) -> bool: + def validate(node, low, high): + if not node: + return True + + # 현재 노드의 값이 범위를 벗어나면 False + if not (low < node.val < high): + return False + + # 왼쪽 서브트리는 최대값을 현재 노드 값으로 제한 + # 오른쪽 서브트리는 최소값을 현재 노드 값으로 제한 + return validate(node.left, low, node.val) and validate(node.right, node.val, high) + + return validate(root, float('-inf'), float('inf')) + \ No newline at end of file From 7d8dc0797a333989dced70aafa29bd967cb7e248 Mon Sep 17 00:00:00 2001 From: krokerdile Date: Fri, 11 Apr 2025 19:44:02 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=EA=B0=9C=ED=96=89=20=EB=AC=B8=EC=9E=90=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- validate-binary-search-tree/krokerdile.py | 1 - 1 file changed, 1 deletion(-) diff --git a/validate-binary-search-tree/krokerdile.py b/validate-binary-search-tree/krokerdile.py index c6e85efc4..5cae0f870 100644 --- a/validate-binary-search-tree/krokerdile.py +++ b/validate-binary-search-tree/krokerdile.py @@ -13,4 +13,3 @@ def validate(node, low, high): return validate(node.left, low, node.val) and validate(node.right, node.val, high) return validate(root, float('-inf'), float('inf')) - \ No newline at end of file