Skip to content

Commit 0eb2ff9

Browse files
committed
feat: Add Climbing Stairs
1 parent 35e0c54 commit 0eb2ff9

File tree

1 file changed

+87
-0
lines changed

1 file changed

+87
-0
lines changed

โ€Žclimbing-stairs/thispath98.py

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
class Solution:
2+
def climbStairsFact(self, n: int) -> int:
3+
"""
4+
Intuition:
5+
1 + 1 + ... + 1 ๋Š” 2๊ฐ€ 0๊ฐœ์ผ ๋•Œ n์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ = 1.
6+
1 + 2 + ... + 1 ๋Š” 2๊ฐ€ 1๊ฐœ์ผ ๋•Œ n์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ = (n-1)C1.
7+
2 + 2 + ... + 1 ๋Š” 2๊ฐ€ 2๊ฐœ์ผ ๋•Œ n์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜ = (n-2)C2.
8+
...
9+
์ฆ‰, n์ด 0๋ถ€ํ„ฐ ์ตœ๋Œ€๋กœ ๋†“์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ’(two_cnt)๊นŒ์ง€
10+
1๋กœ ๋†“์—ฌ์ ธ ์žˆ๋Š” ๋ฐฐ์—ด์—์„œ 2์˜ ์œ„์น˜๋ฅผ ์„ ํƒ(์กฐํ•ฉ)ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค.
11+
12+
Time Complexity:
13+
O(N^2 log N):
14+
(n-i)Ci๋Š” O((N - i) log i)์ด๊ณ , i๊ฐ€ 0๋ถ€ํ„ฐ two_cnt๊นŒ์ง€ ์ฆ๊ฐ€ํ•  ๊ฒฝ์šฐ
15+
๋Œ€๋žต O(N log N)๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.
16+
์ด๋ฅผ two_cnt(N//2) ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ, O(N^2 log N).
17+
18+
Space Complexity:
19+
O(1):
20+
answer๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด๊ฐ€๋ฉฐ ๊ฐ’ ๊ณ„์‚ฐ.
21+
"""
22+
import math
23+
24+
two_cnt = n // 2
25+
answer = 1
26+
27+
for i in range(1, two_cnt + 1):
28+
# (n - i)Ci
29+
# ์—ฌ๊ธฐ์„œ int๋กœ ํ˜•๋ณ€ํ™˜ ํ•  ๊ฒฝ์šฐ ์ˆ˜์น˜์  ๋ถˆ์•ˆ์ • ๋ฐœ์ƒ
30+
answer += math.factorial(n - i) / math.factorial(n - 2 * i) / math.factorial(i)
31+
32+
return int(answer) # int๋กœ ํ˜•๋ณ€ํ™˜ ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ TypeError
33+
34+
def climbStairsComb(self, n: int) -> int:
35+
"""
36+
Intuition:
37+
`climbStairsFact`์—์„œ Factorial์€ ์ˆ˜์น˜์  ๋ถˆ์•ˆ์ •์„ฑ์œผ๋กœ ์ธํ•ด
38+
๋”์šฑ ์•ˆ์ •์ ์ธ math.comb๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
39+
40+
Time Complexity:
41+
O(N^2 log N):
42+
(n-i)Ci๋Š” O((N - i) log i)์ด๊ณ , i๊ฐ€ 0๋ถ€ํ„ฐ two_cnt๊นŒ์ง€ ์ฆ๊ฐ€ํ•  ๊ฒฝ์šฐ
43+
๋Œ€๋žต O(N log N)๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.
44+
์ด๋ฅผ two_cnt(N//2) ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฏ€๋กœ, O(N^2 log N).
45+
46+
Space Complexity:
47+
O(1):
48+
answer๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด๊ฐ€๋ฉฐ ๊ฐ’ ๊ณ„์‚ฐ.
49+
"""
50+
import math
51+
52+
two_cnt = n // 2
53+
answer = 1
54+
55+
for i in range(1, two_cnt + 1):
56+
# (n - i)Ci
57+
# math.comb ๋ฉ”์†Œ๋“œ๋Š” ์ˆ˜์น˜์ ์œผ๋กœ ์•ˆ์ •์ ์œผ๋กœ ๊ณ„์‚ฐํ•ด์ค€๋‹ค
58+
answer += math.comb(n - i, i)
59+
return answer
60+
61+
def climbStairsFib(self, n: int) -> int:
62+
"""
63+
Intuition:
64+
climb stairs ๋ฌธ์ œ๋Š” ๋Œ€ํ‘œ์ ์ธ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๋ฌธ์ œ์ด๋‹ค.
65+
์‹ค์ œ๋กœ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด๋ณด๋ฉด,
66+
1 -> 1
67+
2 -> 2
68+
3 -> 3
69+
4 -> 5
70+
5 -> 8
71+
...
72+
๋กœ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
73+
74+
Time Complexity:
75+
O(N):
76+
N๋ฒˆ ์ˆœํšŒํ•˜์—ฌ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ตฌํ˜„.
77+
78+
Space Complexity:
79+
O(N):
80+
N๊ฐœ ๋งŒํผ ํ•ด์‹œ key-value ์Œ์„ ์ €์žฅ.
81+
"""
82+
fib_dict = {1: 1, 2: 2, 3: 3}
83+
for i in range(1, n + 1):
84+
if i not in fib_dict:
85+
fib_dict[i] = fib_dict[i - 1] + fib_dict[i - 2]
86+
if i == n:
87+
return fib_dict[i]

0 commit comments

Comments
ย (0)