Skip to content

Commit fe19f47

Browse files
authored
Merge pull request #2052 from ZetBe/main
[ZetBe] WEEK 02 Solutions
2 parents cd3eb3f + 988d223 commit fe19f47

File tree

5 files changed

+173
-0
lines changed

5 files changed

+173
-0
lines changed

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

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
'''
2+
๋ฌธ์ œ: ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์„ธ ์ˆ˜์˜ ์กฐํ•ฉ์œผ๋กœ ํ•ฉ์ด 0์ด ๋˜๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ์ฐพ๊ธฐ
3+
ํ’€์ด: ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ์ฒซ ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๋‘ ์ˆ˜๋ฅผ ํˆฌ ํฌ์ธํ„ฐ๋กœ ํƒ์ƒ‰
4+
์‹œ๊ฐ„๋ณต์žก๋„: O(n^2)
5+
๋ฐฐ์—ด์„ ์ •๋ ฌํ•˜๋Š”๋ฐ O(n log n), O(n)์œผ๋กœ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ์ˆ˜์— ๋Œ€ํ•ด ํˆฌ ํฌ์ธํ„ฐ๋กœ ๋‚˜๋จธ์ง€ ๋‘ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋ฐ O(n)์ด๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n^2)์ด๋‹ค.
6+
๊ณต๊ฐ„๋ณต์žก๋„: O(1)
7+
์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(1)์ด๋‹ค.
8+
์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ: ๋ฆฌ์ŠคํŠธ
9+
10+
๋ณ„๋„์˜ ํšŒ๊ณ : ์ •๋‹ต์— ์ค‘๋ณต๋œ ์กฐํ•ฉ์ด ๋“ค์–ด๊ฐ€์ง€ ์•Š๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด,
11+
์ฒซ ๋ฒˆ์งธ ์ˆ˜๋ฅผ ๊ณ ์ •ํ•  ๋•Œ ์ด์ „ ์ˆ˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ณ , ๋‚˜๋จธ์ง€ ๋‘ ์ˆ˜๋ฅผ ์ฐพ์„ ๋•Œ๋„ ์„ธ ์ˆ˜์˜ ํ•ฉ์ด 0์ผ ๊ฒฝ์šฐ, ๊ฐ ๋‘ ๋™์ผํ•œ ์ˆ˜๊ฐ€ ์—ฐ์†์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ํ•˜์˜€๋‹ค.
12+
'''
13+
14+
import ast
15+
class Solution:
16+
def threeSum(self, nums: List[int]) -> List[List[int]]:
17+
nums.sort()
18+
answer = []
19+
for i in range(len(nums)-2):
20+
if i > 0 and nums[i-1] == nums[i]:
21+
continue
22+
l, r = i+1, len(nums)-1
23+
while l < r:
24+
if nums[i] + nums[l] + nums[r] == 0:
25+
arr = [nums[i], nums[l], nums[r]]
26+
answer.append(arr[:])
27+
while l < r and nums[l] == nums[l + 1]:
28+
l+=1
29+
while l < r and nums[r] == nums[r - 1]:
30+
r-=1
31+
l += 1
32+
r -= 1
33+
elif nums[i] + nums[l] + nums[r] < 0:
34+
l += 1
35+
else:
36+
r -= 1
37+
38+
39+
40+
41+
return answer
42+
43+

โ€Žclimbing-stairs/ZetBe.pyโ€Ž

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
'''
2+
๋ฌธ์ œ: ๊ณ„๋‹จ์ด n ๊ณ„๋‹จ ์žˆ์„ ๋•Œ, ํ•œ ๋ฒˆ์— 1๊ณ„๋‹จ ๋˜๋Š” 2๊ณ„๋‹จ์”ฉ ์˜ค๋ฅผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋ผ.
3+
ํ’€์ด: ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ด์šฉํ•˜์—ฌ ๊ฐ ๊ณ„๋‹จ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ €์žฅํ•œ๋‹ค.
4+
n๋ฒˆ์งธ ๊ณ„๋‹จ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋Š” (n-1)๋ฒˆ์งธ ๊ณ„๋‹จ๊ณผ (n-2)๋ฒˆ์งธ ๊ณ„๋‹จ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜์˜ ํ•ฉ๊ณผ ๊ฐ™๋‹ค.
5+
์‹œ๊ฐ„๋ณต์žก๋„: O(n)
6+
๊ฐ ๊ณ„๋‹จ์— ๋„๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
7+
๊ณต๊ฐ„๋ณต์žก๋„: O(n)
8+
๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ dp ๋ฐฐ์—ด์ด n ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
9+
์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ: ๋ฆฌ์ŠคํŠธ
10+
'''
11+
12+
class Solution:
13+
def climbStairs(self, n: int) -> int:
14+
dp = [0 for i in range(n+1)]
15+
if n < 3:
16+
return n
17+
dp[1] = 1
18+
dp[2] = 2
19+
20+
for i in range(3, n+1):
21+
dp[i] = dp[i-1]+dp[i-2]
22+
23+
return dp[n]
24+
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
'''
2+
๋ฌธ์ œ: ํ•ด๋‹น ์ธ๋ฑ์Šค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค์˜ ๊ณฑ์„ ๊ตฌํ•˜๋ผ
3+
ํ’€์ด: 0์˜ ๊ฐœ์ˆ˜์— ๋”ฐ๋ผ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ ์„œ ํ’€์ด
4+
1. 0์ด 2๊ฐœ ์ด์ƒ์ธ ๊ฒฝ์šฐ: ๋ชจ๋“  ์ธ๋ฑ์Šค์˜ ๊ณฑ์ด 0์ด๋ฏ€๋กœ, [0, 0, ..., 0] ๋ฐ˜ํ™˜
5+
2. 0์ด 1๊ฐœ์ธ ๊ฒฝ์šฐ: 0์ด ์žˆ๋Š” ์ธ๋ฑ์Šค์—๋Š” ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค์˜ ๊ณฑ์„, ๋‚˜๋จธ์ง€ ์ธ๋ฑ์Šค์—๋Š” 0์„ ๋ฐ˜ํ™˜
6+
3. 0์ด ์—†๋Š” ๊ฒฝ์šฐ: ์ „์ฒด ๊ณฑ์„ ๊ฐ ์ธ๋ฑ์Šค์˜ ๊ฐ’์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ฐ˜ํ™˜
7+
์‹œ๊ฐ„๋ณต์žก๋„: O(n)
8+
nums ๋ฐฐ์—ด์„ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒํ•˜๋ฉฐ ๊ณฑ์„ ๊ณ„์‚ฐํ•˜๊ณ , ๋‹ค์‹œ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒํ•˜๋ฉฐ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
9+
๊ณต๊ฐ„๋ณต์žก๋„: O(n)
10+
๊ฐ™์€ ํฌ๊ธฐ์˜ ๊ฒฐ๊ณผ ๋ฐฐ์—ด์„ ๋ฐ˜ํ™˜ํ•˜๋ฏ€๋กœ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
11+
์‚ฌ์šฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ: ๋”•์…”๋„ˆ๋ฆฌ, ๋ฆฌ์ŠคํŠธ
12+
'''
13+
14+
class Solution:
15+
def productExceptSelf(self, nums: List[int]) -> List[int]:
16+
d = {}
17+
now = 1
18+
answer = []
19+
for i in nums:
20+
if i in d:
21+
d[i] += 1
22+
else:
23+
d[i] = 1
24+
if i != 0:
25+
now *= i
26+
27+
if 0 in d and d[0] > 1:
28+
return [0 for i in range(len(nums))]
29+
30+
if 0 in d and d[0] == 1:
31+
for i in nums:
32+
if i == 0:
33+
answer.append(now)
34+
else:
35+
answer.append(0)
36+
return answer
37+
38+
for i in nums:
39+
answer.append(now//i)
40+
return answer
41+

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
'''
2+
๋ฌธ์ œ: ๋‘ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๋‘ ๋ฌธ์ž์—ด์ด ์•„๋‚˜๊ทธ๋žจ์ธ์ง€ ํŒ๋ณ„ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜์‹œ์˜ค.
3+
์•„๋‚˜๊ทธ๋žจ์ด๋ž€, ํ•œ ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž๋ฅผ ์žฌ๋ฐฐ์—ดํ•˜์—ฌ ๋‹ค๋ฅธ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ฅผ ๋งํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "listen"๊ณผ "silent"๋Š” ์•„๋‚˜๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.
4+
ํ•ด๊ฒฐ: ๋”•ํ…Œ์ด์…˜์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž ๋นˆ๋„์ˆ˜๋ฅผ ์ €์žฅํ•œ ํ›„, ๋‘ ๋”•ํ…Œ์ด์…˜์ด ๋™์ผํ•œ์ง€ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
5+
6+
์‹œ๊ฐ„๋ณต์žก๋„: O(n), n์€ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
7+
๊ฐ ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ์”ฉ ์ˆœํšŒํ•˜๋ฉฐ ๋”•ํ…Œ์ด์…˜์— ๋ฌธ์ž์˜ ๋นˆ๋„์ˆ˜๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ž…๋‹ˆ๋‹ค.
8+
๊ณต๊ฐ„๋ณต์žก๋„: O(1)
9+
์•ŒํŒŒ๋ฒณ์˜ ๊ฐœ์ˆ˜๋Š” ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ, ๋”•ํ…Œ์ด์…˜์— ์ €์žฅ๋˜๋Š” ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ 26๊ฐœ(์˜์–ด ์•ŒํŒŒ๋ฒณ ๊ธฐ์ค€)๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(1)์ž…๋‹ˆ๋‹ค.
10+
'''
11+
12+
class Solution:
13+
def isAnagram(self, s: str, t: str) -> bool:
14+
d1 = {}
15+
d2 = {}
16+
if len(s) != len(t):
17+
return False
18+
19+
for i in range(len(s)):
20+
if s[i] in d1:
21+
d1[s[i]] += 1
22+
else:
23+
d1[s[i]] = 1
24+
25+
if t[i] in d2:
26+
d2[t[i]] += 1
27+
else:
28+
d2[t[i]] = 1
29+
30+
31+
if d1 == d2:
32+
return True
33+
return False
34+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
'''
2+
๋ฌธ์ œ: ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๊ฐ€ ์œ ํšจํ•œ์ง€ ํ™•์ธํ•˜๊ธฐ
3+
ํ’€์ด: ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ ๋…ธ๋“œ๊ฐ€ ์œ ํšจํ•œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€ ํ™•์ธ
4+
์‹œ๊ฐ„๋ณต์žก๋„: O(n)
5+
๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธํ•˜๋ฏ€๋กœ ์ „์ฒด ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.
6+
๊ณต๊ฐ„๋ณต์žก๋„: O(h)
7+
์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์ด ํŠธ๋ฆฌ์˜ ๋†’์ด h์— ๋น„๋ก€ํ•˜๋ฏ€๋กœ ์ „์ฒด ๊ณต๊ฐ„๋ณต์žก๋„๋Š” O(h)์ด๋‹ค.
8+
'''
9+
10+
11+
12+
# Definition for a binary tree node.
13+
# class TreeNode:
14+
# def __init__(self, val=0, left=None, right=None):
15+
# self.val = val
16+
# self.left = left
17+
# self.right = right
18+
class Solution:
19+
def isValidBST(self, root: Optional[TreeNode]) -> bool:
20+
def dfs(root, ma, mi):
21+
if root == None:
22+
return True
23+
24+
if not (mi < root.val < ma):
25+
return False
26+
27+
return dfs(root.left, root.val, mi) and dfs(root.right, ma, root.val)
28+
29+
a = dfs(root, 10**100, -1*(10**100))
30+
return a
31+

0 commit comments

Comments
ย (0)