-
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
[KwonNayeon] Week 3 #766
Merged
Merged
[KwonNayeon] Week 3 #766
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
116ad02
Add placeholder file for 'Two Sum' problem
KwonNayeon 43fe332
Merge branch 'DaleStudy:main' into main
KwonNayeon a3f13cf
Add solution for "219. Two Sum"
KwonNayeon 58d4dd3
Add solution for "234. Reverse Bits"
KwonNayeon 15eca17
Solved "239. Product of Array Except Self"
KwonNayeon 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,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 |
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,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) |
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,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] | ||
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.
깔끔하게 풀어주셨군요!
한편 O(n²)보다 적은 시간복잡도를 갖는 풀이도 한번 해보셔도 도움 될 것 같습니다~
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.
@taewanseoul 님 리뷰 감사합니다. 시간복잡도를 줄이는 방법도 생각해볼게요!