Skip to content

Commit 03ef4b9

Browse files
committed
feat: Add Decode Ways soultions
1 parent 687f74f commit 03ef4b9

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

โ€Ždecode-ways/thispath98.py

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
class Solution:
2+
def numDecodings(self, s: str) -> int:
3+
"""
4+
Intuition:
5+
๋ฌธ์ž๋ฅผ ์ชผ๊ฐœ์„œ ๋””์ฝ”๋“œ ์กฐํ•ฉ์„ ์–ป๋Š”๋‹ค.
6+
์ดํ›„, ๋””์ฝ”๋“œ ์กฐํ•ฉ์—์„œ 2๊ฐœ์”ฉ ๋ฌถ์„ ๊ฒฝ์šฐ 26๋ณด๋‹ค ํฐ ์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
7+
๋‹ค์‹œ ํ•œ๋ฒˆ ์ชผ๊ฐ ๋‹ค.
8+
๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ ๋””์ฝ”๋“œ ์กฐํ•ฉ์—์„œ ๊ฐ’์„ ์–ป๋Š” ๊ฒฝ์šฐ๋Š”
9+
ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๋”ฐ๋ฅธ๋‹ค.
10+
11+
Time Complexity:
12+
O(N):
13+
๋ฌธ์ž๋ฅผ ์ชผ๊ฐœ๊ณ , ๋ฌถ๋Š” ๋ฌธ์ž ์กฐํ•ฉ์„ ๊ตฌํ•˜๊ณ ,
14+
ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์—์„œ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์€ ๋ชจ๋‘ O(N)๋งŒํผ ์†Œ์š”๋œ๋‹ค.
15+
16+
Space Complexity:
17+
O(1):
18+
์ตœ์•…์˜ ๊ฒฝ์šฐ N๊ฐœ์— ๋Œ€ํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ•ด์•ผ ํ•˜๊ณ ,
19+
N์€ ์ตœ๋Œ€ 100์ด๋ฏ€๋กœ O(1)์ด๋‹ค.
20+
"""
21+
if s[0] == "0":
22+
return 0
23+
24+
# ๋ฌธ์ž์—ด์—์„œ 0 ์•ž์— 1 ํ˜น์€ 2๊ฐ€ ๋ถ™๋Š”์ง€ ํ™•์ธ
25+
# ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, ๋””์ฝ”๋“œ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ return 0
26+
# O(N)
27+
splitted_s = []
28+
start = 0
29+
for i in range(len(s)):
30+
if s[i] == "0":
31+
if s[i - 1] in "12":
32+
splitted_s.append(s[start: i - 1])
33+
start = i + 1
34+
else:
35+
return 0
36+
splitted_s.append(s[start:])
37+
38+
# ์ชผ๊ฐœ์ง„ ๋ฌธ์ž์—์„œ ๋‘ ๋ฌธ์ž๋ฅผ ๋ณด๊ณ , ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š”์ง€
39+
# (26 ์ดํ•˜์ธ์ง€)๋ฅผ ํ™•์ธํ•œ๋‹ค.
40+
# ๋ฌถ์„ ์ˆ˜ ์—†๋‹ค๋ฉด, ๋ฌธ์ž๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ชผ๊ฐ ๋‹ค.
41+
# O(N)
42+
interval = []
43+
for splitted in splitted_s:
44+
start = 0
45+
for i in range(1, len(splitted)):
46+
if int(splitted[i - 1: i + 1]) > 26:
47+
interval.append(i - start)
48+
start = i
49+
50+
interval.append(len(splitted) - start)
51+
52+
answer = 1
53+
fib_dict = {0: 1, 1: 1, 2: 2}
54+
55+
56+
def get_fib(n):
57+
if n not in fib_dict:
58+
fib_dict[n] = get_fib(n - 1) + get_fib(n - 2)
59+
return fib_dict[n]
60+
61+
62+
# ์ชผ๊ฐœ์ง„ ๋ฌธ์ž์—์„œ ๋””์ฝ”๋“œ ์กฐํ•ฉ์€
63+
# ๋ฌธ์ž ๊ฐœ์ˆ˜๋ฅผ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์— ๋„ฃ์€ ๊ฐ’์ด๋‹ค.
64+
# ์ด ๊ฐ’๋“ค์€ ์ชผ๊ฐœ์ง„ ๋ฌธ์ž๋“ค์— ๋Œ€ํ•˜์—ฌ ๊ณฑ์…ˆ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
65+
# O(N)
66+
get_fib(max(interval))
67+
for n in interval:
68+
answer *= fib_dict[n]
69+
return answer

0 commit comments

Comments
ย (0)