Skip to content

Commit c454857

Browse files
authored
Merge pull request #2028 from unpo88/main
[unpo88] WEEK 02 solutions
2 parents 1d0bf6d + 89ddd12 commit c454857

File tree

5 files changed

+502
-0
lines changed

5 files changed

+502
-0
lines changed

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

Lines changed: 192 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,192 @@
1+
class Solution:
2+
def threeSum(self, nums: list[int]) -> list[list[int]]:
3+
nums.sort()
4+
result = set()
5+
6+
for i in range(len(nums) - 2):
7+
# ์–‘์ˆ˜์ธ ๊ฒฝ์šฐ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†์Œ
8+
if nums[i] > 0:
9+
break
10+
11+
# i ์ค‘๋ณต skip
12+
if i > 0 and nums[i] == nums[i - 1]:
13+
continue
14+
15+
left = i + 1
16+
right = len(nums) - 1
17+
18+
while left < right:
19+
total = nums[i] + nums[left] + nums[right]
20+
21+
if total == 0:
22+
result.add((nums[i], nums[left], nums[right]))
23+
24+
# ์ค‘๋ณต ๊ฑด๋„ˆ๋›ฐ๊ธฐ
25+
while left < right and nums[left] == nums[left + 1]:
26+
left += 1
27+
# ์ค‘๋ณต ๊ฑด๋„ˆ๋›ฐ๊ธฐ
28+
while left < right and nums[right] == nums[right - 1]:
29+
right -= 1
30+
left += 1
31+
right -= 1
32+
elif total < 0:
33+
left += 1
34+
else:
35+
right -= 1
36+
37+
return [list(t) for t in result]
38+
39+
40+
"""
41+
================================================================================
42+
ํ’€์ด ๊ณผ์ • - 10:51 ์‹œ์ž‘
43+
================================================================================
44+
45+
1. ์ •์ˆ˜ ๋ฐฐ์—ด nums๊ฐ€ ์ฃผ์–ด์ง€๋ฉด
46+
2. ๋ชจ๋“  ์„ธ ์Œ [nums[i], nums[j], nums[k]]์„ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค
47+
3. i != j, i != k, j != k ์—ฌ์•ผํ•˜๊ณ 
48+
4. nums[i] + nums[j] + nums[k] == 0 ์ด์–ด์•ผํ•œ๋‹ค
49+
5. ์ค‘๋ณต๋œ ์„ธ ์Œ์ด ํฌํ•จ๋˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค
50+
51+
52+
[1์ฐจ ์‹œ๋„] Brute Force 3์ค‘ ๋ฐ˜๋ณต๋ฌธ
53+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
54+
6. ์ œ์•ฝ์„ ๋ฌด์‹œํ•˜๊ณ  ์ƒ๊ฐํ•ด๋ณด๋ฉด Brute Force 3์ค‘ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์ฐพ์„ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Œ
55+
7. ์ค‘๋ณต๋„ ์ œ๊ฑฐํ•ด์•ผํ•˜๋‹ˆ๊นŒ ๋งˆ์ง€๋ง‰์— set์„ ๋‘๊ณ  ์ฒ˜๋ฆฌ
56+
57+
result = []
58+
n = len(nums)
59+
60+
for i in range(n):
61+
for j in range(i+1, n):
62+
for k in range(j+1, n):
63+
if nums[i] + nums[j] + nums[k] == 0:
64+
triplet = sorted([nums[i], nums[j], nums[k]])
65+
if triplet not in result:
66+
result.append(triplet)
67+
68+
return result
69+
70+
8. Time Limit Exceeded ๋ฐœ์ƒ
71+
9. O(nยณ) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๋„ˆ๋ฌด ๋А๋ฆผ
72+
73+
74+
[2์ฐจ ์‹œ๋„] Two Sum ์‘์šฉ (HashSet)
75+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
76+
10. 3๊ฐœ๋ฅผ ๋™์‹œ์— ์ฐพ์œผ๋ ค๋‹ˆ๊นŒ ์–ด๋ ค์šด ๊ฒƒ ๊ฐ™์€๋ฐ
77+
11. 2๊ฐœ๋ฅผ ๋จผ์ € ๊ตฌํ•˜๊ณ , ๋‚˜๋จธ์ง€ ํ•˜๋‚˜๋ฅผ ๋”ํ•˜๋ฉด 0์ด ๋˜๋Š”์ง€๋ฅผ ํ™•์ธํ•ด๋ณผ๊นŒ
78+
12. ๋‘ ์ˆ˜์˜ ํ•ฉ = ๋‚˜๋จธ์ง€ ํ•˜๋‚˜์˜ ๊ฐ’
79+
13. -nums[i] = nums[j] + nums[k]
80+
14. ๊ทธ๋Ÿผ Two Sum ๋ฌธ์ œ๋กœ ํ’€ ์ˆ˜ ์žˆ์„๋“ฏ?
81+
15. ๋‘ ๊ฐœ์˜ ํ•ฉ์ด set์— ์กด์žฌํ•˜๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๋Š” ํ˜•ํƒœ๋กœ ๊ฐ€๋ณด์ž
82+
83+
result = set()
84+
85+
for i in range(len(nums)):
86+
seen = set()
87+
for j in range(i + 1, len(nums)):
88+
complement = -(nums[i] + nums[j])
89+
if complement in seen:
90+
result.add(tuple(sorted([nums[i], nums[j], complement])))
91+
seen.add(nums[j])
92+
93+
return [list(x) for x in result]
94+
95+
16. ์•„ ๊ทผ๋ฐ ์ด๊ฒƒ๋„ Time Limit Exceeded๊ฐ€ ๋ฐœ์ƒํ•˜๋„ค
96+
17. O(nยฒ) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ๊ฐœ์„ ํ–ˆ์ง€๋งŒ sorted() ํ˜ธ์ถœ๊ณผ set ์—ฐ์‚ฐ์ด ์ถ”๊ฐ€ ๋น„์šฉ ๋ฐœ์ƒ
97+
18. ๋‹ค๋ฅธ ์ ‘๊ทผ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•  ๋“ฏ
98+
99+
100+
[3์ฐจ ์‹œ๋„] Two Pointer ๋ฐฉ์‹
101+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
102+
19. ๊ทธ๋Ÿผ Two Pointer ๋ฐฉ์‹์œผ๋กœ ํ’€์–ด์•ผํ•  ๊ฒƒ ๊ฐ™์€๋ฐ
103+
20. Two Pointer ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์ •๋ ฌ์ด ํ•„์š”ํ•จ
104+
21. Two Sum์˜ Two Pointer ํŒจํ„ด์„ ์ƒ๊ฐํ•ด๋ณด์ž
105+
22. ๊ทผ๋ฐ 3๊ฐœ๋ฅผ ๋™์‹œ์— ์ฐพ์œผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
106+
23. i๋ฅผ ๊ณ ์ •ํ•˜๊ณ , ๋‚˜๋จธ์ง€์—์„œ Two Sum์œผ๋กœ ํ•ฉ์ด -nums[i]์ธ ๋‘ ์ˆ˜๋ฅผ ์ฐพ๋Š”๋‹ค!
107+
108+
์ •๋ ฌ ์ „: [-1, 0, 1, 2, -1, -4]
109+
์ •๋ ฌ ํ›„: [-4, -1, -1, 0, 1, 2]
110+
index: 0 1 2 3 4 5
111+
112+
i = 0, left = i + 1, right = len(nums) - 1
113+
[-4, -1, -1, 0, 1, 2]
114+
i L R
115+
116+
i = 1:
117+
[-4, -1, -1, 0, 1, 2]
118+
i L R
119+
120+
25. ์ •๋ ฌ ๋จผ์ € ํ•œ ํ›„ ํ•ฉ์˜ ํฌ๊ธฐ์— ๋”ฐ๋ผ ํฌ์ธํ„ฐ๋ฅผ ์ด๋™
121+
122+
nums.sort()
123+
result = set()
124+
125+
for i in range(len(nums) - 2):
126+
left = i + 1
127+
right = len(nums) - 1
128+
129+
while left < right:
130+
total = nums[i] + nums[left] + nums[right]
131+
132+
if total == 0:
133+
result.add((nums[i], nums[left], nums[right]))
134+
left += 1
135+
right -= 1
136+
elif total < 0:
137+
left += 1
138+
else:
139+
right -= 1
140+
141+
return [list(t) for t in result]
142+
143+
25. O(nยฒ) ์‹œ๊ฐ„ ๋ณต์žก๋„ (์ •๋ ฌ O(n log n) + ๋ฐ˜๋ณต๋ฌธ O(nยฒ))
144+
26. ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผ๋˜๋Š” ๊ฒƒ ํ™•์ธ ์™„๋ฃŒ
145+
27. ๊ทผ๋ฐ ์ด ๋ฐฉ์‹์œผ๋กœ ํ’€์—ˆ๋Š”๋ฐ ๋А๋ฆฌ๋‹ค
146+
147+
148+
[4์ฐจ ๊ฐœ์„ ] ์ค‘๋ณต ์ œ๊ฑฐ ์ตœ์ ํ™”
149+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
150+
28. Claude์—๊ฒŒ ๋ฌผ์–ด๋ณด๋‹ˆ tuple ์ƒ์„ฑํ•  ๋•Œ ์ƒ์ˆ˜ ๋ฐฐ์ˆ˜๊ฐ€ ํฐ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ํ•จ
151+
29. ์ค‘๋ณต์„ ๋ฏธ๋ฆฌ ์Šคํ‚ตํ•ด์ฃผ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๋ ค์คŒ
152+
30. i๊ฐ€ ์–‘์ˆ˜์ธ ๊ฒฝ์šฐ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ํ•„์š” ์—†์Œ (์ •๋ ฌ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ)
153+
31. i, left, right ์ค‘๋ณต ๊ฑด๋„ˆ๋›ฐ๊ธฐ ์ถ”๊ฐ€
154+
155+
nums.sort()
156+
result = set()
157+
158+
for i in range(len(nums) - 2):
159+
# ์–‘์ˆ˜์ธ ๊ฒฝ์šฐ ๋” ์ด์ƒ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†์Œ
160+
if nums[i] > 0:
161+
break
162+
163+
# i ์ค‘๋ณต skip
164+
if i > 0 and nums[i] == nums[i - 1]:
165+
continue
166+
167+
left = i + 1
168+
right = len(nums) - 1
169+
170+
while left < right:
171+
total = nums[i] + nums[left] + nums[right]
172+
173+
if total == 0:
174+
result.add((nums[i], nums[left], nums[right]))
175+
176+
# ์ค‘๋ณต ๊ฑด๋„ˆ๋›ฐ๊ธฐ
177+
while left < right and nums[left] == nums[left + 1]:
178+
left += 1
179+
while left < right and nums[right] == nums[right - 1]:
180+
right -= 1
181+
left += 1
182+
right -= 1
183+
elif total < 0:
184+
left += 1
185+
else:
186+
right -= 1
187+
188+
return [list(t) for t in result]
189+
190+
32. ์ค‘๋ณต ์ฒ˜๋ฆฌ ์ตœ์ ํ™”๋กœ ์†๋„ ๊ฐœ์„ 
191+
33. ์ตœ์ข… ํ†ต๊ณผ ํ™•์ธ ์™„๋ฃŒ
192+
"""

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

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
class Solution:
2+
def climbStairs(self, n: int) -> int:
3+
if n <= 2:
4+
return n
5+
6+
prev2, prev1 = 1, 2
7+
8+
for i in range(3, n + 1):
9+
current = prev1 + prev2
10+
prev2 = prev1
11+
prev1 = current
12+
13+
return prev1
14+
15+
"""
16+
================================================================================
17+
ํ’€์ด ๊ณผ์ • - 08:49 ์‹œ์ž‘ ~ 08:54 ์ข…๋ฃŒ (5๋ถ„ ์†Œ์š”)
18+
================================================================================
19+
20+
1. ๊ณ„๋‹จ ์˜ฌ๋ผ๊ฐˆ๊ฑด๋ฐ, n step์”ฉ ์˜ฌ๋ผ๊ฐ
21+
2. 1 ๋˜๋Š” 2๋‹จ๊ณ„์”ฉ ๊ฐˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ํƒ‘๊นŒ์ง€ ์˜ฌ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์„๊นŒ?
22+
3. ์žฌ๊ท€๋กœ ๋‚ด๊ฐ€ 1 ๋˜๋Š” 2๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋‘ ๊ตฌํ•ด์•ผํ•  ๊ฒƒ ๊ฐ™์€๋ฐ?
23+
4. n - 1, n - 2
24+
5. 3๋ฒˆ์งธ ๊ณ„๋‹จ๋ถ€ํ„ฐ ์ฒซ ๋ฒˆ์งธ ๊ณ„๋‹จ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• + ๋‘ ๋ฒˆ์งธ ๊ณ„๋‹จ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•
25+
6. DP๋กœ ํ’€์–ด์•ผํ•  ๊ฒƒ ๊ฐ™์€๋ฐ?
26+
7. ์ด๊ฑฐ ๊ณ„๋‹จ ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋ณด๋‹ˆ๊นŒ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์ด๋„ค?
27+
28+
29+
[1์ฐจ ์‹œ๋„] ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ DP
30+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
31+
7. ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด๊ณผ ์œ ์‚ฌํ•œ ํŒจํ„ด ๋ฐœ๊ฒฌ
32+
8. dp[i] = dp[i-1] + dp[i-2] ์ ํ™”์‹ ๋„์ถœ
33+
9. ๊ธฐ์ € ์‚ฌ๋ก€: dp[1] = 1, dp[2] = 2
34+
35+
dp = { 1: 1, 2: 2}
36+
for i in range(3, n + 1):
37+
dp[i] = dp[i-1] + dp[i-2]
38+
39+
return dp[n]
40+
41+
10. ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผ๋˜๋Š” ๊ฒƒ ํ™•์ธ ์™„๋ฃŒ
42+
43+
44+
[2์ฐจ ๊ฐœ์„ ] ๊ณต๊ฐ„ ๋ณต์žก๋„ ์ตœ์ ํ™”
45+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
46+
11. ์ž˜ ์ƒ๊ฐํ•ด๋ณด๋ฉด ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ ์•„์˜ˆ ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์•ˆ๋งŒ๋“ค๊ณ  ํ‘ธ๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์„๋“ฏ?
47+
13. ๋ณ€์ˆ˜ 2๊ฐœ(prev2, prev1)๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„๋ฅผ O(1)๋กœ ๊ฐœ์„ 
48+
49+
if n <= 2:
50+
return n
51+
52+
prev2, prev1 = 1, 2
53+
54+
for i in range(3, n + 1):
55+
current = prev1 + prev2
56+
prev2 = prev1
57+
prev1 = current
58+
59+
return prev1
60+
61+
14. ๊ณต๊ฐ„ ๋ณต์žก๋„ O(n) โ†’ O(1)๋กœ ๊ฐœ์„  ์™„๋ฃŒ
62+
15. ์ตœ์ข… ํ†ต๊ณผ ํ™•์ธ ์™„๋ฃŒ
63+
"""
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
class Solution:
2+
def productExceptSelf(self, nums: list[int]) -> list[int]:
3+
n = len(nums)
4+
answer = [1] * n
5+
6+
left = 1
7+
for i in range(n):
8+
answer[i] = left
9+
left *= nums[i]
10+
11+
right = 1
12+
for i in range(n-1, -1, -1):
13+
answer[i] *= right
14+
right *= nums[i]
15+
16+
return answer
17+
18+
"""
19+
================================================================================
20+
ํ’€์ด ๊ณผ์ • - 09:43 ์‹œ์ž‘ ~ ํ’€์ด ๊ณผ์ • ๋– ์˜ฌ๋ฆฌ์ง€ ๋ชปํ•จ
21+
================================================================================
22+
23+
1. ์ •์ˆ˜ ๋ฐฐ์—ด nums๊ฐ€ ์ฃผ์–ด์ง
24+
2. ๋ฐฐ์—ด answer๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š”๋ฐ
25+
3. answer[i]๋Š” nums์˜ ๋ชจ๋“  ์š”์†Œ์˜ ๊ณฑ๊ณผ ๊ฐ™๋‹ค (nums[i]๋ฅผ ์ œ์™ธํ•œ)
26+
4. O(n) ์‹œ๊ฐ„์— ์‹คํ–‰๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•ด์•ผํ•˜๊ณ , ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค
27+
5. ๋‚˜๋ˆ„๊ธฐ ์—ฐ์‚ฐ์„ ์–ด๋–ป๊ฒŒ ์ด์šฉ ์•ˆํ•˜๊ณ  ํ’€์ง€?
28+
29+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
30+
6. Claude ๋„์›€ โ†’ answer[i] = (i ์™ผ์ชฝ์˜ ๊ณฑ) * (i ์˜ค๋ฅธ์ชฝ์˜ ๊ณฑ)
31+
32+
33+
[1์ฐจ ์‹œ๋„] ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ๊ณฑ ๋ฐฐ์—ด ์‚ฌ์šฉ
34+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
35+
7. ๊ฐ ์œ„์น˜์˜ ์™ผ์ชฝ ๋ˆ„์ ๊ณฑ๊ณผ ์˜ค๋ฅธ์ชฝ ๋ˆ„์ ๊ณฑ์„ ๋ฏธ๋ฆฌ ๊ณ„์‚ฐ
36+
8. left[i] = nums[0] * ... * nums[i-1]
37+
9. right[i] = nums[i+1] * ... * nums[n-1]
38+
10. answer[i] = left[i] * right[i]
39+
40+
n = len(nums)
41+
left = [1] * n
42+
for i in range(1, n):
43+
left[i] = left[i-1] * nums[i-1]
44+
45+
right = [1] * n
46+
for i in range(n-2, -1, -1):
47+
right[i] = right[i+1] * nums[i+1]
48+
49+
return [left[i] * right[i] for i in range(n)]
50+
51+
11. ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผ๋˜๋Š” ๊ฒƒ ํ™•์ธ ์™„๋ฃŒ
52+
53+
54+
[2์ฐจ ๊ฐœ์„ ] ๊ณต๊ฐ„ ๋ณต์žก๋„ ์ตœ์ ํ™”
55+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
56+
12. left, right ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ๋งŒ๋“ค๋ฉด O(n) ๊ณต๊ฐ„ ๋ณต์žก๋„ ์ถ”๊ฐ€ ์‚ฌ์šฉ
57+
13. answer ๋ฐฐ์—ด์„ ์žฌํ™œ์šฉํ•˜๋ฉด ์ถ”๊ฐ€ ๊ณต๊ฐ„ ์—†์ด ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
58+
14. ์ฒซ ๋ฒˆ์งธ ์ˆœํšŒ: answer์— ์™ผ์ชฝ ๋ˆ„์ ๊ณฑ ์ €์žฅ
59+
15. ๋‘ ๋ฒˆ์งธ ์ˆœํšŒ: answer์— ์˜ค๋ฅธ์ชฝ ๋ˆ„์ ๊ณฑ์„ ๊ณฑํ•˜๋ฉด์„œ ์ตœ์ข… ๊ฒฐ๊ณผ ์™„์„ฑ
60+
61+
n = len(nums)
62+
answer = [1] * n
63+
64+
left = 1
65+
for i in range(n):
66+
answer[i] = left
67+
left *= nums[i]
68+
69+
right = 1
70+
for i in range(n-1, -1, -1):
71+
answer[i] *= right
72+
right *= nums[i]
73+
74+
return answer
75+
76+
16. ์ถ”๊ฐ€ ๊ณต๊ฐ„ ๋ณต์žก๋„ O(n) โ†’ O(1)๋กœ ๊ฐœ์„  ์™„๋ฃŒ (answer ๋ฐฐ์—ด ์ œ์™ธ)
77+
17. ์ตœ์ข… ํ†ต๊ณผ ํ™•์ธ ์™„๋ฃŒ
78+
79+
80+
[๋ฌธ์ œ ๋ณต๊ธฐ] ํŒจํ„ด ๋ฐœ๊ฒฌ ๊ณผ์ •
81+
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
82+
- ๋ฌธ์ œ๋ฅผ ๋‹ค์‹œ ๋ณต๊ธฐํ•ด๋ณด๋ฉด
83+
- ๊ฐ ์œ„์น˜์—์„œ ์ž๊ธฐ ์ž์‹ ์„ ์ œ์™ธํ•œ ๋ชจ๋“  ์›์†Œ์˜ ๊ณฑ์„ ๊ตฌํ•ด์•ผํ•จ
84+
- ์ œ์•ฝ์„ ๋ฌด์‹œํ•˜๋ฉด ์ด์ค‘ ๋ฐ˜๋ณต๋ฌธ Brute Force๋กœ ํ’€ ์ˆ˜ ์žˆ์Œ
85+
- ์ œ์•ฝ์„ ๋ฌด์‹œํ•˜๋ฉด ๋‚˜๋ˆ—์…ˆ์„ ์ด์šฉํ•ด์„œ๋„ ํ’€ ์ˆ˜ ์žˆ์Œ
86+
- ๋‚˜๋ˆ—์…ˆ๋„ ๊ธˆ์ง€๋˜๊ณ  O(n) ์‹œ๊ฐ„์— ํ’€์–ด์•ผํ•œ๋‹ค๋ฉด?
87+
- "์ œ์™ธํ•œ๋‹ค"๋ฅผ ์–ด๋–ป๊ฒŒ ํ‘œํ˜„ํ•ด์ฃผ๋ฉด ์ข‹์„๊นŒ? (์ด ๋ถ€๋ถ„์ด ํ•ต์‹ฌ)
88+
89+
์ž‘์€ ์˜ˆ์‹œ๋กœ ํŒจํ„ด ์ฐพ๊ธฐ:
90+
nums = [2, 3, 4]
91+
92+
answer[0] = 3 * 4 = 12
93+
answer[1] = 2 * 4 = 8
94+
answer[2] = 2 * 3 = 6
95+
96+
answer[0] = (์—†์Œ) * (3 * 4) = 12
97+
answer[1] = (2) * (4) = 8
98+
answer[2] = (2 * 3) * (์—†์Œ) = 6
99+
100+
- ํŒจํ„ด ๋ฐœ๊ฒฌ โ†’ ์™ผ์ชฝ ๋ถ€๋ถ„ * ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„
101+
- ํ•ด๋ฒ• ๋„์ถœ โ†’ ์™ผ์ชฝ ๋ถ€๋ถ„์˜ ๋ชจ๋“  ๊ณฑ * ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์˜ ๋ชจ๋“  ๊ณฑ
102+
103+
ํŒจํ„ด์„ ์ผ๋ฐ˜ํ™”ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”:
104+
answer[i] = nums[0] * ... * nums[i-1] * nums[i+1] * ... * nums[n-1]
105+
left[i] = nums[0] * ... * nums[i-1]
106+
right[i] = nums[i+1] * ... * nums[n-1]
107+
answer[i] = left[i] * right[i]
108+
109+
์ ํ™”์‹ ์ฐพ๋Š”๋ฐ, DP์  ์‚ฌ๊ณ  ํ•„์š”:
110+
์™ผ์ชฝ ๋ˆ„์ ๊ณฑ:
111+
left[1] = nums[0]
112+
left[2] = nums[0] * nums[1] = left[1] * nums[1]
113+
left[3] = nums[0] * nums[1] * nums[2] = left[2] * nums[2]
114+
โ†’ left[i] = left[i-1] * nums[i-1]
115+
116+
์˜ค๋ฅธ์ชฝ ๋ˆ„์ ๊ณฑ:
117+
right[2] = nums[3]
118+
right[1] = nums[3] * nums[2] = right[2] * nums[2]
119+
right[0] = nums[3] * nums[2] * nums[1] = right[1] * nums[1]
120+
โ†’ right[i] = right[i+1] * nums[i+1]
121+
122+
๊ด€๋ จํ•ด์„œ ์ฝ”๋“œ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•จ
123+
"""

0 commit comments

Comments
ย (0)