Skip to content

Commit 37f6345

Browse files
Merge pull request #1270 from taurus09318976/main
[taurus09318976] WEEK 2 solutions
2 parents 783ff8a + 9e5e7e4 commit 37f6345

File tree

5 files changed

+205
-0
lines changed

5 files changed

+205
-0
lines changed

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

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# ์ด ๋ฌธ์ œ๋Š” 1)์ •๋ ฌ์„ ํ†ตํ•ด ์ค‘๋ณต์„ ์ฒ˜๋ฆฌ, 2)ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ํƒ์ƒ‰,
2+
#3) ํ•ฉ์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด left๋ฅผ +1, ํฌ๋ฉด right๋ฅผ -1์ด๋™, 4)์ค‘๋ณต๋œ
3+
4+
class Solution:
5+
def threeSum(self, nums: List[int]) -> List[List[int]]:
6+
nums.sort() #์ค‘๋ณต๋œ ์ˆซ์ž๋ฅผ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•˜๊ณ , ํˆฌ ํฌ์ธํ„ฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด์„ ์ •๋ ฌ
7+
result = []
8+
9+
#์ฒซ๋ฒˆ์งธ ์ˆซ์ž๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฃจํ”„
10+
#๋งˆ์ง€๋ง‰ ๋‘ ์ˆซ์ž๋Š” left์™€ right๊ฐ€ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ len(nums)-2ํ•ด์•ผ ํ•จ
11+
#์˜ˆ: len(nums) = 4๋ผ๋ฉด, range(2)=[0,1]
12+
for i in range(len(nums) - 2):
13+
#์ฒซ๋ฒˆ์งธ ์ˆซ์ž๊ฐ€ ์ด์ „๊ณผ ๊ฐ™์œผ๋ฉด ๊ฑด๋„ˆ๋œ€
14+
if i > 0 and nums[i] == nums[i-1]:
15+
continue
16+
17+
#ํˆฌ ํฌ์ธํ„ฐ ์„ค์ • : left๋Š” ์ฒซ๋ฒˆ์งธ ์ˆซ์ž ๋‹ค์Œ๋ถ€ํ„ฐ, right๋Š” ๋ฐฐ์—ด์˜ ๋๋ถ€ํ„ฐ ์„ค์ •
18+
left, right = i + 1, len(nums) - 1
19+
20+
while left < right:
21+
total = nums[i] + nums[left] + nums[right]
22+
#ํ•ฉ์ด 0๋ณด๋‹ค ์ž‘์œผ๋ฉด left๋ฅผ +1
23+
if total < 0:
24+
left += 1
25+
#ํ•ฉ์ด 0๋ณด๋‹ค ํฌ๋ฉด right๋ฅผ -1์ด๋™
26+
elif total > 0:
27+
right -= 1
28+
else:
29+
#ํ•ฉ์ด 0์ธ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ
30+
result.append([nums[i], nums[left], nums[right]])
31+
#์ค‘๋ณต๋œ ์ˆซ์ž ๊ฑด๋„ˆ๋›ฐ๊ธฐ
32+
while left < right and nums[left] == nums[left + 1]:
33+
left += 1
34+
while left < right and nums[right] == nums[right - 1]:
35+
right -= 1
36+
#๋‹ค์Œ ๊ฐ€๋Šฅํ•œ ์กฐํ•ฉ์„ ์ฐพ๊ธฐ ์œ„ํ•ด ํฌ์ธํ„ฐ๋ฅผ ์ด๋™
37+
left += 1
38+
right -= 1
39+
40+
return result
41+
42+
43+
#์‹œ๊ฐ„ ๋ณต์žก๋„: O(nยฒ)
44+
#์ •๋ ฌ: O(n log n)
45+
#๋ฉ”์ธ ๋ฃจํ”„: O(nยฒ)
46+
#๊ณต๊ฐ„ ๋ณต์žก๋„: O(1) (์ถœ๋ ฅ ๋ฐฐ์—ด ์ œ์™ธํ•˜๊ณ  ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)
47+
48+
49+
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#์ด ๋ฌธ์ œ๋Š” ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๊ณผ ๋™์ผํ•œ ํŒจํ„ด์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์˜ (n+1)๋ฒˆ์งธ ์ˆ˜์™€ ๊ฐ™์Œ
2+
3+
class Solution:
4+
def climbStairs(self, n: int) -> int:
5+
#n์ด 1์ด๋‚˜ 2์ธ ๊ฒฝ์šฐ๋Š” ๋ฐ”๋กœ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜
6+
if n == 1:
7+
return 1
8+
if n == 2:
9+
return 2
10+
11+
#์ฒซ ๋ฒˆ์งธ, ๋‘ ๋ฒˆ์งธ ๊ณ„๋‹จ์˜ ๋ฐฉ๋ฒ• ์ˆ˜ ์ €์žฅ
12+
prev, curr = 1, 2
13+
14+
#์„ธ ๋ฒˆ์งธ ๊ณ„๋‹จ๋ถ€ํ„ฐ n๊ณ„๋‹จ๊นŒ์ง€ ๊ณ„์‚ฐ
15+
for i in range(3, n + 1):
16+
prev, curr = curr, prev + curr
17+
18+
return curr
19+
20+
21+
#์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
22+
#for ๋ฃจํ”„๊ฐ€ n-2๋ฒˆ ์‹คํ–‰๋จ(3๋ถ€ํ„ฐ n๊นŒ์ง€)
23+
#๊ฐ ๋ฐ˜๋ณต์—์„œ ์ƒ์ˆ˜ ์‹œ๊ฐ„(1)์˜ ์—ฐ์‚ฐ๋งŒ ์ˆ˜ํ–‰๋จ
24+
#๋”ฐ๋ผ์„œ ์ „์ฒด ์‹œ๊ฐ„์€ n์— ๋น„๋ก€ํ•จ
25+
26+
#๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
27+
#์ถ”๊ฐ€์ ์ธ ๋ฐฐ์—ด์ด๋‚˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
28+
#๋‘ ๊ฐœ์˜ ๋ณ€์ˆ˜(prev, curr)๋งŒ ์‚ฌ์šฉํ•จ
29+
#์ž…๋ ฅ ํฌ๊ธฐ(n)๊ฐ€ ์•„๋ฌด๋ฆฌ ์ปค์ ธ๋„ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์€ ์ผ์ •ํ•จ
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
#์ด ๋ฌธ์ œ๋Š” ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ i๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์š”์†Œ๋“ค์˜ ๊ณฑ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ž„
2+
#1)๊ฐ ์š”์†Œ i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์ˆซ์ž๋“ค์˜ ๊ณฑ๊ณผ ์˜ค๋ฅธ์ชฝ ์ˆซ์ž๋“ค์˜ ๊ณฑ์„ ๋”ฐ๋กœ ๊ณ„์‚ฐ, 2)์ตœ์ข… ๊ฒฐ๊ณผ๋Š” ์™ผ์ชฝ ๊ณฑ๊ณผ ์˜ค๋ฅธ์ชฝ ๊ณฑ์˜ ๊ณฑ
3+
4+
class Solution:
5+
def productExceptSelf(self, nums: List[int]):
6+
#์ž…๋ ฅ ๋ฐฐ์—ด์˜ ๊ธธ์ด๋ฅผ ์ €์žฅ
7+
##Example 1์˜ ๊ฒฝ์šฐ : len(nums) = 4
8+
n = len(nums)
9+
#๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด์„ ๊ณฑ์…ˆ์˜ ํ•ญ๋“ฑ์›์ธ 1๋กœ ๋ชจ๋‘ ์ดˆ๊ธฐํ™”
10+
#cf. ๋นˆ ์ง‘ํ•ฉ์˜ ๊ณฑ์€ 1, ํ•ฉ์€ 0์œผ๋กœ ์ •์˜๋จ
11+
##answer = [1] * 4 = [1, 1, 1, 1]
12+
answer = [1] * n
13+
14+
#i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ์ˆซ์ž๋“ค์˜ ๊ณฑ์„ ๊ณ„์‚ฐ
15+
#์™ผ์ชฝ ๊ณฑ์˜ ์ดˆ๊ธฐ๊ฐ’
16+
left_product = 1
17+
for i in range(n):
18+
#ํ˜„์žฌ ์œ„์น˜์˜ ์™ผ์ชฝ ๊ณฑ์„ ์ €์žฅ
19+
##nums[0]์˜ ์™ผ์ชฝ์—๋Š” ์•„๋ฌด ์ˆซ์ž๋„ ์—†์œผ๋ฏ€๋กœ,
20+
##์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ์ƒํƒœ์˜ ๊ณฑ์€ 1์ž„. ๋”ฐ๋ผ์„œ answer[0]=1
21+
##answer[1]=1 / answer[2]=2 / answer[3]=6
22+
answer[i] = left_product
23+
#๋‹ค์Œ ์œ„์น˜๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ์ˆ˜๋ฅผ ๊ณฑํ•จ
24+
##left_product = 1 * 1 = 1 / left_product = 1 * 2 = 2
25+
##left_product = 2 * 3 = 6 / left_product = 6 * 4 = 24
26+
left_product *= nums[i]
27+
28+
##์ฒซ ๋ฒˆ์งธ for๋ฌธ ํ›„ answer = [1, 1, 2, 6]
29+
#i๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์ˆซ์ž๋“ค์˜ ๊ณฑ ๊ณ„์‚ฐ ๋ฐ ์ตœ์ข… ๊ฒฐ๊ณผ ์ƒ์„ฑ
30+
right_product = 1
31+
#์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ์ˆœํšŒ
32+
for i in range(n-1, -1, -1):
33+
#ํ˜„์žฌ ์œ„์น˜์˜ ์˜ค๋ฅธ์ชฝ ๊ณฑ์„ ์ €์žฅ
34+
##answer[3] = 6 * 1 = 6 / answer[2] = 2 * 1 = 2
35+
##answer[1] = 1 * 1 = 1 / answer[1] = 1 * 1 = 1
36+
answer[i] *= right_product
37+
#๋‹ค์Œ ์œ„์น˜๋ฅผ ์œ„ํ•ด ํ˜„์žฌ ์ˆ˜๋ฅผ ๊ณฑํ•จ
38+
##right_product = 1 * 4 = 4 / right_product = 4 * 3 = 12
39+
##right_product = 12 * 2 = 24 / right_product = 24 * 1 = 24
40+
right_product *= nums[i]
41+
42+
43+
#์ตœ์ข… ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜
44+
##์ตœ์ข… answer = [24, 12, 8, 6]
45+
return answer
46+
47+
#์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
48+
##๋‘ ๋ฒˆ์˜ ์„ ํ˜• ์ˆœํšŒ๋งŒ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๊ฐ ์ˆœํšŒ๋Š” O(n) ์‹œ๊ฐ„์ด ์†Œ์š”
49+
#๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
50+
##์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
51+
##๋‹จ, ์ถœ๋ ฅ ๋ฐฐ์—ด์€ ๋ฌธ์ œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์ด๋ฏ€๋กœ ์ œ์™ธ
52+
53+
54+
55+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„  1)๋‘ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๊ฐ™์€์ง€ ํ™•์ธ(๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด ์•„๋‚˜๊ทธ๋žจ์ด ๋  ์ˆ˜ ์—†์Œ), 2)char_count๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž๋ณ„ ๊ฐœ์ˆ˜๋ฅผ ํ™•์ธ, 3)๋‘๋ฒˆ์งธ ๋ฌธ์ž์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ ๊ฐ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ํ•˜๋‚˜์”ฉ ๊ฐ์†Œ์‹œํ‚ด, 4)๋งŒ์•ฝ ๋‘๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์—†๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ๊ฑฐ๋‚˜, ์–ด๋–ค ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ ์Œ์ˆ˜๊ฐ€ ๋˜๋ฉด(์ฒซ๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ ๋‘๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์—†๋‹ค๋Š” ์˜๋ฏธ) ์•„๋‚˜๊ทธ๋žจ์ด ์•„๋‹˜
2+
class Solution:
3+
def isAnagram(self, s: str, t: str):
4+
# ๋‘ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ ๋‹ค๋ฅด๋ฉด ์•„๋‚˜๊ทธ๋žจ์ด ๋  ์ˆ˜ ์—†์Œ
5+
if len(s) != len(t):
6+
return False
7+
8+
# ๊ฐ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋นˆ ๋”•์…”๋„ˆ๋ฆฌ
9+
char_count = {}
10+
11+
# ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ์ˆœํšŒ
12+
for i in s:
13+
#ํ•ด๋‹น ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด 0, ์žˆ์œผ๋ฉด ํ˜„์žฌ๊ฐ’ i๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๊ฐ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜ 1์„ ๋”ํ•จ
14+
char_count[i] = char_count.get(i, 0) + 1
15+
16+
# ๋‘ ๋ฒˆ์งธ ๋ฌธ์ž์—ด์˜ ๋ฌธ์ž๋ณ„ ๊ฐœ์ˆ˜๋งŒํผ char_count๋”•์…”๋„ˆ๋ฆฌ์—์„œ ๋นผ๊ธฐ
17+
for i in t:
18+
#์ฒซ๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์—†๋Š” ๋ฌธ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ
19+
if i not in char_count:
20+
return False
21+
22+
char_count[i] -= 1
23+
#char_count๊ฐ€ ์Œ์ˆ˜์ด๋ฏ€๋กœ ์ฒซ๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์žˆ๋Š” ๋ฌธ์ž๊ฐ€ ๋‘๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์—†๋‹ค๋Š” ์˜๋ฏธ
24+
if char_count[i] < 0:
25+
return False
26+
27+
return True
28+
29+
30+
#์‹œ๊ฐ„ ๋ณต์žก๋„: O(n), n= ๋ฌธ์ž์—ด์˜ ๊ธธ์ด
31+
#๊ณต๊ฐ„ ๋ณต์žก๋„: O(1), ์ž…๋ ฅ ํฌ๊ธฐ(n)๊ฐ€ ์•„๋ฌด๋ฆฌ ์ปค์ ธ๋„ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„์ด ์ผ์ •ํ•จ(์˜์–ด ์†Œ๋ฌธ์ž๋งŒ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ตœ๋Œ€ 26๊ฐœ์˜ ํ‚ค๋งŒ ์ €์žฅํ•˜๋ฉด ๋จ)
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Definition for a binary tree node.
2+
# class TreeNode:
3+
# def __init__(self, val=0, left=None, right=None):
4+
# self.val = val
5+
# self.left = left
6+
# self.right = right
7+
8+
#val: ๋…ธ๋“œ์˜ ๊ฐ’, left: ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ, right: ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ
9+
#helper ํ•จ์ˆ˜: ์žฌ๊ท€์ ์œผ๋กœ BST์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌ
10+
#lower: ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์ด ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์ตœ์†Œ๊ฐ’
11+
#upper: ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์ด ๊ฐ€์ ธ์•ผ ํ•˜๋Š” ์ตœ๋Œ€๊ฐ’
12+
13+
class Solution:
14+
def isValidBST(self, root: TreeNode):
15+
def helper(node, lower=float('-inf'), upper=float('inf')):
16+
if not node:
17+
return True
18+
19+
# BST ์กฐ๊ฑด ๊ฒ€์‚ฌ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์ด ํ—ˆ์šฉ๋˜๋Š” ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š”์ง€ ํ™•์ธ(๋ฒ—์–ด๋‚˜๋ฉด false ๋ฐ˜ํ™˜)
20+
if node.val <= lower or node.val >= upper:
21+
return False
22+
23+
# ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊ฒ€์‚ฌ (์ƒํ•œ์„ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •)
24+
if not helper(node.left, lower, node.val):
25+
return False
26+
27+
# ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๊ฒ€์‚ฌ (ํ•˜ํ•œ์„ ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์œผ๋กœ ์„ค์ •)
28+
if not helper(node.right, node.val, upper):
29+
return False
30+
31+
return True
32+
33+
return helper(root)
34+
35+
#์‹œ๊ฐ„ ๋ณต์žก๋„: O(n)
36+
#๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํ•œ๋ฒˆ์”ฉ ๋ฐฉ๋ฌธ
37+
#๊ณต๊ฐ„ ๋ณต์žก๋„: O(n)
38+
#์žฌ๊ท€ ํ˜ธ์ถœ ์Šคํƒ์˜ ๊นŠ์ด๊ฐ€ ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ ํ•„์š”
39+
40+
41+

0 commit comments

Comments
ย (0)