-
Notifications
You must be signed in to change notification settings - Fork 126
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
[Lyla] WEEK 03 #787
Merged
+142
−0
Merged
[Lyla] WEEK 03 #787
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,33 @@ | ||
from typing import List | ||
|
||
|
||
class Solution: | ||
def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]: | ||
result = [] | ||
|
||
def backtrack(start, target, current_combination): | ||
# 종료 조건 | ||
if target == 0: | ||
result.append(list(current_combination)) | ||
return | ||
if target < 0: | ||
return | ||
|
||
# 백트래킹 | ||
for i in range(start, len(candidates)): | ||
current_combination.append(candidates[i]) | ||
backtrack(i, target - candidates[i], current_combination) # 같은 원소를 여러 번 쓸 수 있도록 i를 그대로 둡니다. | ||
current_combination.pop() # 돌아가서 다시 시도할 수 있도록 원소를 제거합니다. | ||
|
||
backtrack(0, target, []) | ||
|
||
return result | ||
|
||
|
||
# 시간 복잡도: O(n^t) | ||
# - 후보 리스트에서 각 숫자를 선택할 수 있기 때문에, n개의 후보를 사용해 t번의 탐색을 할 수 있습니다. | ||
# - 따라서 최악의 경우 탐색 횟수는 O(n^t)로 볼 수 있습니다. | ||
# | ||
# 공간 복잡도: O(t) | ||
# - 재귀 호출 스택의 깊이는 최대 target 값인 t에 비례하므로, 공간 복잡도는 O(t)입니다. | ||
# - 또한, 현재까지 선택된 숫자들의 조합을 저장하는 공간도 최대 t개까지 저장하므로, 공간 복잡도는 O(t)입니다. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
from typing import List | ||
|
||
|
||
class Solution: | ||
def maxSubArray(self, nums: List[int]) -> int: | ||
largest_sum = -float('inf') | ||
current_sum = -float('inf') | ||
|
||
for num in nums: | ||
current_sum = max(current_sum + num, num) | ||
largest_sum = max(largest_sum, current_sum) | ||
|
||
return largest_sum | ||
|
||
|
||
# 시간 복잡도: O(n) | ||
# - nums 배열을 한 번 순회하며 각 요소에 대해 최대 부분 배열 합을 계산하므로 시간 복잡도는 O(n)입니다. | ||
# | ||
# 공간 복잡도: O(1) | ||
# - 추가로 사용하는 변수는 largest_sum과 current_sum 두 개뿐이므로 공간 복잡도는 O(1)입니다. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
from typing import List | ||
|
||
|
||
class Solution: | ||
def productExceptSelf(self, nums: List[int]) -> List[int]: | ||
n = len(nums) | ||
result = [1] * n | ||
|
||
prefix = 1 | ||
for i in range(n): | ||
result[i] *= prefix | ||
prefix *= nums[i] | ||
|
||
suffix = 1 | ||
for i in range(-1, -n-1, -1): | ||
result[i] *= suffix | ||
suffix *= nums[i] | ||
|
||
return result | ||
|
||
|
||
# 시간 복잡도: O(n) | ||
# - 입력 배열 nums를 두 번 순회합니다. | ||
# | ||
# 공간 복잡도: O(1) | ||
# - 추가 공간으로 사용하는 변수는 prefix와 suffix뿐이며, | ||
# 출력 배열(result)은 추가 공간으로 계산하지 않습니다. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,42 @@ | ||||||||||||||||||||||||||
class Solution: | ||||||||||||||||||||||||||
def reverseBits(self, n: int) -> int: | ||||||||||||||||||||||||||
# 이진수로 변환한 후 '0b' 제거 | ||||||||||||||||||||||||||
binary = bin(n)[2:] | ||||||||||||||||||||||||||
# 32비트 길이에 맞게 앞쪽에 0을 채움 | ||||||||||||||||||||||||||
binary = binary.zfill(32) | ||||||||||||||||||||||||||
# 이진수를 뒤집음 | ||||||||||||||||||||||||||
reversed_binary = binary[::-1] | ||||||||||||||||||||||||||
# 뒤집힌 이진수를 정수로 변환하여 반환 | ||||||||||||||||||||||||||
return int(reversed_binary, 2) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# 시간 복잡도: O(32) | ||||||||||||||||||||||||||
# - bin(): O(32) | ||||||||||||||||||||||||||
# - zfill(32): O(32) | ||||||||||||||||||||||||||
# - 문자열 뒤집기 [::-1]: O(32) | ||||||||||||||||||||||||||
# - int(문자열, 2): O(32) | ||||||||||||||||||||||||||
# 총합: O(32) (상수 시간으로 간주 가능) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# 공간 복잡도: O(32) | ||||||||||||||||||||||||||
# - 이진 문자열(binary)와 뒤집힌 문자열(reversed_binary)을 저장하므로 O(32). | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
class Solution: | ||||||||||||||||||||||||||
def reverseBits(self, n: int) -> int: | ||||||||||||||||||||||||||
result = 0 | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
for i in range(32): | ||||||||||||||||||||||||||
# result를 왼쪽으로 1비트 이동하고 n의 마지막 비트를 추가 | ||||||||||||||||||||||||||
result = (result << 1) | n & 1 | ||||||||||||||||||||||||||
# n을 오른쪽으로 1비트 이동 | ||||||||||||||||||||||||||
n >>= 1 | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
return result | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# 시간 복잡도: O(32) | ||||||||||||||||||||||||||
# - 반복문이 32번 실행되며 각 작업(비트 이동 및 OR 연산)은 O(1). | ||||||||||||||||||||||||||
# 총합: O(32) (상수 시간으로 간주 가능) | ||||||||||||||||||||||||||
|
||||||||||||||||||||||||||
# 공간 복잡도: O(1) | ||||||||||||||||||||||||||
# - 추가로 사용하는 변수 result와 n만 저장하므로 상수 공간. | ||||||||||||||||||||||||||
Comment on lines
+37
to
+42
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 아래 공간 복잡도 분석처럼 빅오 표현식에서는
Suggested change
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
from typing import List | ||
|
||
|
||
class Solution: | ||
def twoSum(self, nums: List[int], target: int) -> List[int]: | ||
subtract_map = {} | ||
|
||
for i, num in enumerate(nums): | ||
if num in subtract_map: | ||
return [i, subtract_map[num]] | ||
else: | ||
subtract_map[target - num] = i | ||
|
||
|
||
# 시간 복잡도: O(n) | ||
# - nums 배열을 한 번 순회하며 각 요소를 확인하므로 시간 복잡도는 O(n)입니다. | ||
# | ||
# 공간 복잡도: O(n) | ||
# - 추가로 사용하는 subtract_map 딕셔너리에는 최악의 경우 nums 배열의 모든 요소가 저장되므로 | ||
# 공간 복잡도는 O(n)입니다. |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
두 개의 풀이 모두 멋지네요 😍