From e121646ee45e5dc3098b855e821501bfe135e069 Mon Sep 17 00:00:00 2001 From: ayleeee Date: Tue, 8 Apr 2025 13:01:33 +0900 Subject: [PATCH 1/8] valid-anagram solution --- valid-anagram/ayleeee.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 valid-anagram/ayleeee.py diff --git a/valid-anagram/ayleeee.py b/valid-anagram/ayleeee.py new file mode 100644 index 000000000..ad153e28b --- /dev/null +++ b/valid-anagram/ayleeee.py @@ -0,0 +1,8 @@ +def is_anagram(s: str, t: str) -> bool: + # return sorted(s) == sorted(t) + ''' + Counter : 원소의 빈도수를 세는 자료구조, 한 번씩만 세면 됨 + = O(n) + Sorted : O(nlogn) + ''' + return Counter(s) == Counter(t) From 8618ef36127b40a9bf2265a3eb9fcff2a9b90a64 Mon Sep 17 00:00:00 2001 From: ayleeee Date: Thu, 10 Apr 2025 15:28:11 +0900 Subject: [PATCH 2/8] solved : climbing-stairs --- climbing-stairs/ayleeee.py | 68 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 climbing-stairs/ayleeee.py diff --git a/climbing-stairs/ayleeee.py b/climbing-stairs/ayleeee.py new file mode 100644 index 000000000..7650da575 --- /dev/null +++ b/climbing-stairs/ayleeee.py @@ -0,0 +1,68 @@ +# takes n steps to reach the top +# 1 or 2 steps at a time + +''' +n = 1 +answer = 1 + +n = 2 +answer = 2 +1 step + 1 step +2 step + +n = 3 +answer = 3 +1 step + 1 step + 1 step +1 step + 2 step +2 step + 1 step + +n=4 +answer = 5 +1 step + 1 step + 1 step + 1 step +1 step + 1 step + 2 step +1 step + 2 step + 1 step +2 step + 1 step + 1 step +2 step + 2 step + +n=5 +answer = 8 +1 + 1 + 1 + 1 + 1 +1 + 1 + 1 + 2 +1 + 1 + 2 + 1 +1 + 2 + 1 + 1 +1 + 2 + 2 +2 + 1 + 1 + 1 +2 + 1 + 2 +2 + 2 + 1 + +1 2 3 5 8 ? ? +''' + +# 시간 복잡도 O(n) +# 공간 복잡도 O(n) +def climbStairs(self, n: int) -> int: + dp = [0] * (n + 1) + if n == 1: + return 1 + elif n == 2: + return 2 + dp[1] = 1 + dp[2] = 2 + for i in range(3, n + 1): + dp[i] = dp[i - 1] + dp[i - 2] + return dp[n] + +'''def climbStairs(self, n: int) -> int: + if n == 1: + return 1 + prev1, prev2 = 1, 2 + for i in range(3, n + 1): + current = prev1 + prev2 + prev1 = prev2 + prev2 = current + return prev2 + 시간 복잡도 : O(n) -> 루프가 있기에 + 공간 복잡도 : O(1) -> 추가 배열 없이 상수 공간만 사용 + + ''' + \ No newline at end of file From e02ef099d22bd4ed4c827a4136d739fe7f99c2ee Mon Sep 17 00:00:00 2001 From: ayleeee <86951396+ayleeee@users.noreply.github.com> Date: Thu, 10 Apr 2025 15:42:27 +0900 Subject: [PATCH 3/8] Update ayleeee.py --- valid-anagram/ayleeee.py | 1 + 1 file changed, 1 insertion(+) diff --git a/valid-anagram/ayleeee.py b/valid-anagram/ayleeee.py index ad153e28b..564cdb138 100644 --- a/valid-anagram/ayleeee.py +++ b/valid-anagram/ayleeee.py @@ -6,3 +6,4 @@ def is_anagram(s: str, t: str) -> bool: Sorted : O(nlogn) ''' return Counter(s) == Counter(t) + From 9e6582bdfd699a0a5639699fc70099e9210491cc Mon Sep 17 00:00:00 2001 From: ayleeee <86951396+ayleeee@users.noreply.github.com> Date: Thu, 10 Apr 2025 15:44:13 +0900 Subject: [PATCH 4/8] Update ayleeee.py --- climbing-stairs/ayleeee.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/climbing-stairs/ayleeee.py b/climbing-stairs/ayleeee.py index 7650da575..78540a05b 100644 --- a/climbing-stairs/ayleeee.py +++ b/climbing-stairs/ayleeee.py @@ -65,4 +65,4 @@ def climbStairs(self, n: int) -> int: 공간 복잡도 : O(1) -> 추가 배열 없이 상수 공간만 사용 ''' - \ No newline at end of file + From 8f0f65478c9a69d817dfe0d50b0ea42a4383923d Mon Sep 17 00:00:00 2001 From: ayleeee Date: Thu, 10 Apr 2025 16:06:54 +0900 Subject: [PATCH 5/8] solved : proudct-of-array-except-self --- product-of-array-except-self/ayleeee.py | 34 +++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 product-of-array-except-self/ayleeee.py diff --git a/product-of-array-except-self/ayleeee.py b/product-of-array-except-self/ayleeee.py new file mode 100644 index 000000000..2df16193c --- /dev/null +++ b/product-of-array-except-self/ayleeee.py @@ -0,0 +1,34 @@ +# 정수 배열 nums가 주어졌을 때, 각 위치 i에 대해 +# nums[i]를 제외한 나머지 모든 요소의 곱을 반환하는 함수를 작성 + +''' +nums = [1, 2, 3, 4] +answers = [24, 12, 8, 6] +answers[0] = 2 * 3 * 4 +answers[1] = 1 * 3 * 4 +answers[2] = 1 * 2 * 4 +answers[3] = 1 * 2 * 3 + +조건 : O(n) 시간 복잡도 + +왼쪽에서 오른쪽으로 누적 곱 계산 +오른쪽에서 왼쪽으로 순회하면서, 오른쪽 누적 곱을 계산 +왼쪽 누적 곱과 곱하여 최종 결과 업데이트 + +''' +def productExceptSelf(self, nums: List[int]) -> List[int]: + n = len(nums) + result = [1] * n + left = 1 + right = 1 + # 왼쪽에서 오른쪽으로 누적 곱 계산 + for i in range(n): + result[i] = left + left *= nums[i] + # 오른쪽에서 왼쪽으로 누적 곱 계산 + # 역순으로 반복하는 구문, 오른쪽에서 왼쪽으로 순회 + # range(start, stop, step) => 반복을 시작할 값, 반복을 멈출 값, 반복의 증가 또는 감소 단위 + for i in range(n - 1, -1, -1): + result[i] *= right + right *= nums[i] + return result From bd601c6fe99c43690f7b24923bc87e6c06e63e87 Mon Sep 17 00:00:00 2001 From: ayleeee Date: Thu, 10 Apr 2025 16:23:24 +0900 Subject: [PATCH 6/8] solved : 3sum --- 3sum/ayleeee.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 3sum/ayleeee.py diff --git a/3sum/ayleeee.py b/3sum/ayleeee.py new file mode 100644 index 000000000..22fb1c31d --- /dev/null +++ b/3sum/ayleeee.py @@ -0,0 +1,19 @@ +# 투포인터를 활용해보기 + +def threeSum(self, nums: List[int]) -> List[List[int]]: + n = len(nums) + nums.sort() + result = set() + for i in range(n): + l,r = i+1,n-1 + while l 0: + r -= 1 + else: + result.add((nums[i], nums[l], nums[r])) + l += 1 + return list(result) + From c719829b5d7a5e6604aa11d320d103a723b436ad Mon Sep 17 00:00:00 2001 From: ayleeee Date: Thu, 10 Apr 2025 16:37:33 +0900 Subject: [PATCH 7/8] solved : validate-binary-search-tree --- validate-binary-search-tree/ayleeee.py | 31 ++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 validate-binary-search-tree/ayleeee.py diff --git a/validate-binary-search-tree/ayleeee.py b/validate-binary-search-tree/ayleeee.py new file mode 100644 index 000000000..a2e9dbf59 --- /dev/null +++ b/validate-binary-search-tree/ayleeee.py @@ -0,0 +1,31 @@ +# 트리를 중위 순회하기 왼쪽 -> 루트 -> 오른쪽 +# 이전에 방문한 노드의 값이 현재 값보다 작은지 확인 +# 모든 노드가 조건 만족하면 True + +class TreeNode: + def __init__(self, val=0, left=None, right=None): + self.val = val + self.left = left + self.right = right + +class Solution: + def isValidBST(self, root: Optional[TreeNode]) -> bool: + stack = [] + # 최소값, 최대값 구할 때 사용 + # float('-inf') : 음의 무한대 + # float('inf') : 양의 무한대 + prev = float('-inf') + current = root + + # current가 존재하거나 stack이 비어있지 않은 한 계속 지속 + while current or stack : + while current: + stack.append(current) + current = current.left + current = stack.pop() + if current.val <= prev: + return False + prev = current.val + current = current.right + return True + \ No newline at end of file From b144d2ba426f8418fd1f08727b11eb076363061b Mon Sep 17 00:00:00 2001 From: ayleeee <86951396+ayleeee@users.noreply.github.com> Date: Sat, 12 Apr 2025 04:38:35 +0900 Subject: [PATCH 8/8] Update ayleeee.py --- validate-binary-search-tree/ayleeee.py | 1 - 1 file changed, 1 deletion(-) diff --git a/validate-binary-search-tree/ayleeee.py b/validate-binary-search-tree/ayleeee.py index a2e9dbf59..98ec57240 100644 --- a/validate-binary-search-tree/ayleeee.py +++ b/validate-binary-search-tree/ayleeee.py @@ -28,4 +28,3 @@ def isValidBST(self, root: Optional[TreeNode]) -> bool: prev = current.val current = current.right return True - \ No newline at end of file