From 116ad02ff377d437a0decf3221f931300f4e4494 Mon Sep 17 00:00:00 2001 From: Nayeon Date: Mon, 23 Dec 2024 07:35:51 +0900 Subject: [PATCH 1/4] Add placeholder file for 'Two Sum' problem --- two-sum/KwonNayeon.py | 1 + 1 file changed, 1 insertion(+) create mode 100644 two-sum/KwonNayeon.py diff --git a/two-sum/KwonNayeon.py b/two-sum/KwonNayeon.py new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/two-sum/KwonNayeon.py @@ -0,0 +1 @@ + From a3f13cf3bc04475db32fbcae4a6fc25a83f0fab8 Mon Sep 17 00:00:00 2001 From: Nayeon Date: Mon, 23 Dec 2024 17:27:17 +0900 Subject: [PATCH 2/4] Add solution for "219. Two Sum" --- two-sum/KwonNayeon.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/two-sum/KwonNayeon.py b/two-sum/KwonNayeon.py index 8b1378917..209596b1a 100644 --- a/two-sum/KwonNayeon.py +++ b/two-sum/KwonNayeon.py @@ -1 +1,27 @@ +""" +Constraints: + - 2 <= nums.length <= 10^4 + - -10^9 <= nums[i] <= 10^9 + - -10^9 <= target <= 10^9 + - Only one valid answer exists. + + Time Complexity: O(n²) + - 중첩 반복문을 사용하기 때문 + - 첫 번째 반복문: n번 + - 각각에 대해 두 번째 반복문: n-1, n-2, ... 1번 + - 따라서 총 연산 횟수는 n * (n-1)/2로 O(n²) + + Space Complexity: O(1) + - 추가 공간을 사용하지 않음 + - result 리스트는 항상 크기가 2로 고정 +""" +class Solution: + def twoSum(self, nums: List[int], target: int) -> List[int]: + result = [] + + for i in range(len(nums)): + for j in range(i+1, len(nums)): + if nums[j] == target - nums[i]: + return [i, j] + From 58d4dd300f4c1fb784d1c558a2676ce5ac273891 Mon Sep 17 00:00:00 2001 From: Nayeon Date: Fri, 27 Dec 2024 14:39:21 +0900 Subject: [PATCH 3/4] Add solution for "234. Reverse Bits" --- reverse-bits/KwonNayeon.py | 24 ++++++++++++++++++++++++ two-sum/KwonNayeon.py | 6 ++---- 2 files changed, 26 insertions(+), 4 deletions(-) create mode 100644 reverse-bits/KwonNayeon.py diff --git a/reverse-bits/KwonNayeon.py b/reverse-bits/KwonNayeon.py new file mode 100644 index 000000000..838ff907d --- /dev/null +++ b/reverse-bits/KwonNayeon.py @@ -0,0 +1,24 @@ +""" +Constraints: + - The input must be a binary string of length 32 + +Time Complexity: O(1) + - 항상 고정된 32비트 문자열에 대해 연산하므로 상수 시간 + +Space Complexity: O(1) + - 32비트 고정 크기의 문자열 연산만 사용하므로 상수 공간 + +풀이 방법: + 1. format(n, '032b')를 사용해 입력받은 정수를 32비트 이진수 문자열로 변환함 + 2. 문자열 슬라이싱 [::-1]으로 비트를 뒤집음 + 3. int(reversed_binary, 2)로 뒤집은 이진수 문자열을 다시 정수로 변환함 +""" + +class Solution: + def reverseBits(self, n: int) -> int: + + binary = format(n, '032b') + + reversed_binary = binary[::-1] + + return int(reversed_binary, 2) diff --git a/two-sum/KwonNayeon.py b/two-sum/KwonNayeon.py index 209596b1a..969e83b72 100644 --- a/two-sum/KwonNayeon.py +++ b/two-sum/KwonNayeon.py @@ -5,13 +5,13 @@ - -10^9 <= target <= 10^9 - Only one valid answer exists. - Time Complexity: O(n²) +Time Complexity: O(n²) - 중첩 반복문을 사용하기 때문 - 첫 번째 반복문: n번 - 각각에 대해 두 번째 반복문: n-1, n-2, ... 1번 - 따라서 총 연산 횟수는 n * (n-1)/2로 O(n²) - Space Complexity: O(1) +Space Complexity: O(1) - 추가 공간을 사용하지 않음 - result 리스트는 항상 크기가 2로 고정 """ @@ -23,5 +23,3 @@ def twoSum(self, nums: List[int], target: int) -> List[int]: for j in range(i+1, len(nums)): if nums[j] == target - nums[i]: return [i, j] - - From 15eca17efeed9de9ad5cd18727e50b7ebe49f123 Mon Sep 17 00:00:00 2001 From: Nayeon Date: Fri, 27 Dec 2024 21:29:32 +0900 Subject: [PATCH 4/4] Solved "239. Product of Array Except Self" --- product-of-array-except-self/KwonNayeon.py | 38 ++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 product-of-array-except-self/KwonNayeon.py diff --git a/product-of-array-except-self/KwonNayeon.py b/product-of-array-except-self/KwonNayeon.py new file mode 100644 index 000000000..1ac91388e --- /dev/null +++ b/product-of-array-except-self/KwonNayeon.py @@ -0,0 +1,38 @@ +""" +Constraints: + 1. 2 <= nums.length <= 10^5 + 2. -30 <= nums[i] <= 30 + 3. The product of any prefix or suffix of nums is guaranteed to fit in a 32-bit integer + +Time Complexity: O(n) + - 배열을 두 번 순회하므로 O(n) + +Space Complexity: O(1) + - 출력 배열(answer)을 제외하면 추가 공간이 상수만큼만 필요(left, right 변수) + +풀이 방법: + 1. answer 배열을 1로 초기화 (곱셈에서는 1이 영향을 주지 않음) + 2. 왼쪽에서 오른쪽으로 순회: + - answer[i]에 현재까지의 left 누적값을 곱함 + - left *= nums[i]로 다음을 위해 left 값을 업데이트 + 3. 오른쪽에서 왼쪽으로 순회 (range(n-1, -1, -1) 사용): + - answer[i]에 현재까지의 right 누적값을 곱함 + - right *= nums[i]로 다음을 위해 right 값을 업데이트 +""" + +class Solution: + def productExceptSelf(self, nums: List[int]) -> List[int]: + n = len(nums) + answer = [1] * n + + left = 1 + for i in range(n): + answer[i] *= left + left *= nums[i] + + right = 1 + for i in range(n-1, -1, -1): + answer[i] *= right + right *= nums[i] + + return answer