Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[KwonNayeon] Week 3 #766

Merged
merged 5 commits into from
Dec 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
38 changes: 38 additions & 0 deletions product-of-array-except-self/KwonNayeon.py
Original file line number Diff line number Diff line change
@@ -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
24 changes: 24 additions & 0 deletions reverse-bits/KwonNayeon.py
Original file line number Diff line number Diff line change
@@ -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)
25 changes: 25 additions & 0 deletions two-sum/KwonNayeon.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""
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]
Comment on lines +22 to +25
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

깔끔하게 풀어주셨군요!

한편 O(n²)보다 적은 시간복잡도를 갖는 풀이도 한번 해보셔도 도움 될 것 같습니다~

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@taewanseoul 님 리뷰 감사합니다. 시간복잡도를 줄이는 방법도 생각해볼게요!

Loading