Skip to content

Commit c0070c9

Browse files
authored
Merge pull request #2075 from devyulbae/main
[devyulbae] WEEK 02 solutions
2 parents 3c1d4d5 + ad33975 commit c0070c9

File tree

5 files changed

+153
-0
lines changed

5 files changed

+153
-0
lines changed

โ€Ž3sum/devyulbae.pyโ€Ž

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"""
2+
Blind 75 - LeetCode Problem 15. 3Sum
3+
https://leetcode.com/problems/3sum/
4+
์‹œ๊ฐ„๋ณต์žก๋„ O(n^2)
5+
"""
6+
from typing import List
7+
8+
class Solution:
9+
def threeSum(self, nums: List[int]) -> List[List[int]]:
10+
nums.sort()
11+
answer = []
12+
n = len(nums)
13+
14+
for i in range(n):
15+
if i > 0 and nums[i] == nums[i - 1]:
16+
continue # ์ค‘๋ณต ์›์†Œ ์Šคํ‚ต
17+
18+
left, right = i + 1, n - 1
19+
while left < right:
20+
total = nums[i] + nums[left] + nums[right]
21+
22+
if total == 0:
23+
answer.append([nums[i], nums[left], nums[right]])
24+
left += 1
25+
right -= 1
26+
27+
# ์ค‘๋ณต๊ฐ’ ๊ฑด๋„ˆ๋›ฐ๊ธฐ
28+
while left < right and nums[left] == nums[left - 1]:
29+
left += 1
30+
while left < right and nums[right] == nums[right + 1]:
31+
right -= 1
32+
33+
elif total < 0:
34+
left += 1 # ํ•ฉ์ด ์ž‘์œผ๋‹ˆ left๋ฅผ ํ‚ค์›Œ์•ผ ํ•จ
35+
36+
else:
37+
right -= 1 # ํ•ฉ์ด ํฌ๋‹ˆ right๋ฅผ ์ค„์—ฌ์•ผ ํ•จ
38+
39+
return answer
40+
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
"""
2+
Blind 75 - LeetCode Problem 70. Climbing Stairs
3+
https://leetcode.com/problems/climbing-stairs/
4+
5+
๊ณ„๋‹จ์ด n๊ฐœ, ํ•œ ๋ฒˆ์— 1์นธ ๋˜๋Š” 2์นธ์”ฉ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค.
6+
combinations๋ฅผ ์ผ๋”๋‹ˆ ์‹œ๊ฐ„์ดˆ๊ณผ ๋ฐœ์ƒ (O(2^n))
7+
8+
DP๋ฅผ ์ด์šฉํ•ด ์‹œ๊ฐ„๋ณต์žก๋„ O(n) ๊ณต๊ฐ„๋ณต์žก๋„ O(1)๋กœ ํ’€๊ธฐ
9+
f(n) = f(n-1) + f(n-2)
10+
"""
11+
class Solution:
12+
def climbStairs(self, n: int) -> int:
13+
if n <= 2:
14+
return n
15+
16+
one_before = 2 # n=2
17+
two_before = 1 # n=1
18+
19+
for _ in range(3, n+1):
20+
current = one_before + two_before # f(1) = f(n-1) + f(n-2)
21+
two_before = one_before # f ๋ฐ€๊ธฐ
22+
one_before = current # f ๋ฐ€๊ธฐ
23+
24+
return current
25+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
"""
2+
Blind75 - 4. Product of Array Except Self
3+
https://leetcode.com/problems/product-of-array-except-self/
4+
์กฐ๊ฑด :
5+
- ๋ถ„ํ•  ์—†์ด O(n) ์‹œ๊ฐ„ ๋ณต์žก๋„ ์ดํ•˜๋กœ ํ’€์–ด๋ผ
6+
- nums์˜ ๋ชจ๋“  ์›์†Œ์˜ ๊ณฑ์€ 32๋น„ํŠธ ์ •์ˆ˜ ๋ฒ”์œ„ ๋‚ด์— ๋“ค์–ด์˜จ๋‹ค
7+
- ๋‚˜๋ˆ—์…ˆ ๊ธˆ์ง€
8+
9+
0์ด ๋ช‡๊ฐœ์ธ๊ฐ€?
10+
- 2๊ฐœ ์ด์ƒ : ๋ชจ๋‘ 0์ธ ๋ฐฐ์—ด
11+
- 1๊ฐœ : 0 ๋ณธ์ธ ์ œ์™ธ๋Š” 0์ธ ๋ฐฐ์—ด
12+
- 0๊ฐœ : ์ขŒ ์šฐ ๊ฐ๊ฐ์˜ ๋ฉ”๋ชจ์ด์ œ์ด์…˜์„ ํ•ด์ฃผ๋ฉด O(2n)์œผ๋กœ ๋ฐฐ์—ด ์ƒ์„ฑ, O(n)์œผ๋กœ ์ •๋‹ต ๋ฐฐ์—ด ์ƒ์„ฑํ•˜๋ฏ€๋กœ O(n)
13+
"""
14+
from typing import List
15+
16+
class Solution:
17+
def productExceptSelf(self, nums: List[int]) -> List[int]:
18+
zero_count = nums.count(0)
19+
if zero_count > 1:
20+
return [0] * len(nums)
21+
elif zero_count == 1:
22+
all_product = 1
23+
for num in nums:
24+
all_product *= num if num != 0 else 1
25+
return [0 if num!= 0 else all_product for num in nums]
26+
27+
else:
28+
left_product = [nums[0]]
29+
right_product = [nums[-1]]
30+
for i in range(1,len(nums)):
31+
left_product.append(left_product[i-1]*nums[i])
32+
right_product.append(right_product[i-1]*nums[-1-i])
33+
34+
answer = []
35+
for i in range(len(nums)):
36+
answer.append((left_product[i-1] if i>0 else 1)* (right_product[-2-i] if i < len(nums)-1 else 1))
37+
return answer
38+

โ€Žvalid-anagram/devyulbae.pyโ€Ž

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""
2+
Blind 75 - LeetCode Problem 242: Valid Anagram
3+
https://leetcode.com/problems/valid-anagram/
4+
5+
t๊ฐ€ s์˜ ์• ๋„ˆ๊ทธ๋žจ์ธ์ง€ ํ™•์ธํ•˜๊ธฐ
6+
"""
7+
from collections import Counter
8+
9+
class Solution:
10+
def isAnagram(self, s: str, t: str) -> bool:
11+
if len(s) != len(t):
12+
return False
13+
14+
return Counter(s) == Counter(t)
15+
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""
2+
Blind 75 - LeetCode Problem 98: Validate Binary Search Tree
3+
https://leetcode.com/problems/validate-binary-search-tree/
4+
5+
์ค‘์œ„ ์ˆœํšŒ - ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ -> ๋ฃจํŠธ -> ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ
6+
์ค‘์œ„ ์ˆœํšŒํ•œ ๊ฐ’์ด ์˜ค๋ฆ„์ฐจ์ˆœ์ธ์ง€ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.
7+
"""
8+
from typing import Optional, List
9+
10+
# Definition for a binary tree node.
11+
class TreeNode:
12+
def __init__(self, val=0, left=None, right=None):
13+
self.val = val
14+
self.left = left
15+
self.right = right
16+
17+
class Solution: # root = [2,1,3] answer = True
18+
def traverse(self, node: Optional[TreeNode], inorder: List[int]) -> None:
19+
if not node:
20+
return
21+
self.traverse(node.left, inorder)
22+
inorder.append(node.val)
23+
self.traverse(node.right, inorder)
24+
25+
26+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
27+
inorder = []
28+
self.traverse(root, inorder)
29+
30+
for i in range(1, len(inorder)):
31+
if inorder[i] <= inorder[i-1]:
32+
return False
33+
34+
return True
35+

0 commit comments

Comments
ย (0)