Skip to content

Commit

Permalink
feat: Add Decode Ways soultions
Browse files Browse the repository at this point in the history
  • Loading branch information
thispath98 committed Dec 21, 2024
1 parent 687f74f commit 03ef4b9
Showing 1 changed file with 69 additions and 0 deletions.
69 changes: 69 additions & 0 deletions decode-ways/thispath98.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
class Solution:
def numDecodings(self, s: str) -> int:
"""
Intuition:
๋ฌธ์ž๋ฅผ ์ชผ๊ฐœ์„œ ๋””์ฝ”๋“œ ์กฐํ•ฉ์„ ์–ป๋Š”๋‹ค.
์ดํ›„, ๋””์ฝ”๋“œ ์กฐํ•ฉ์—์„œ 2๊ฐœ์”ฉ ๋ฌถ์„ ๊ฒฝ์šฐ 26๋ณด๋‹ค ํฐ ์ˆ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ
๋‹ค์‹œ ํ•œ๋ฒˆ ์ชผ๊ฐ ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐ ๋””์ฝ”๋“œ ์กฐํ•ฉ์—์„œ ๊ฐ’์„ ์–ป๋Š” ๊ฒฝ์šฐ๋Š”
ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๋”ฐ๋ฅธ๋‹ค.
Time Complexity:
O(N):
๋ฌธ์ž๋ฅผ ์ชผ๊ฐœ๊ณ , ๋ฌถ๋Š” ๋ฌธ์ž ์กฐํ•ฉ์„ ๊ตฌํ•˜๊ณ ,
ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์—์„œ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์€ ๋ชจ๋‘ O(N)๋งŒํผ ์†Œ์š”๋œ๋‹ค.
Space Complexity:
O(1):
์ตœ์•…์˜ ๊ฒฝ์šฐ N๊ฐœ์— ๋Œ€ํ•œ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์„ ๊ตฌํ•ด์•ผ ํ•˜๊ณ ,
N์€ ์ตœ๋Œ€ 100์ด๋ฏ€๋กœ O(1)์ด๋‹ค.
"""
if s[0] == "0":
return 0

# ๋ฌธ์ž์—ด์—์„œ 0 ์•ž์— 1 ํ˜น์€ 2๊ฐ€ ๋ถ™๋Š”์ง€ ํ™•์ธ
# ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด, ๋””์ฝ”๋“œ ํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ return 0
# O(N)
splitted_s = []
start = 0
for i in range(len(s)):
if s[i] == "0":
if s[i - 1] in "12":
splitted_s.append(s[start: i - 1])
start = i + 1
else:
return 0
splitted_s.append(s[start:])

# ์ชผ๊ฐœ์ง„ ๋ฌธ์ž์—์„œ ๋‘ ๋ฌธ์ž๋ฅผ ๋ณด๊ณ , ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š”์ง€
# (26 ์ดํ•˜์ธ์ง€)๋ฅผ ํ™•์ธํ•œ๋‹ค.
# ๋ฌถ์„ ์ˆ˜ ์—†๋‹ค๋ฉด, ๋ฌธ์ž๋ฅผ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ชผ๊ฐ ๋‹ค.
# O(N)
interval = []
for splitted in splitted_s:
start = 0
for i in range(1, len(splitted)):
if int(splitted[i - 1: i + 1]) > 26:
interval.append(i - start)
start = i

interval.append(len(splitted) - start)

answer = 1
fib_dict = {0: 1, 1: 1, 2: 2}


def get_fib(n):
if n not in fib_dict:
fib_dict[n] = get_fib(n - 1) + get_fib(n - 2)
return fib_dict[n]


# ์ชผ๊ฐœ์ง„ ๋ฌธ์ž์—์„œ ๋””์ฝ”๋“œ ์กฐํ•ฉ์€
# ๋ฌธ์ž ๊ฐœ์ˆ˜๋ฅผ ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด์— ๋„ฃ์€ ๊ฐ’์ด๋‹ค.
# ์ด ๊ฐ’๋“ค์€ ์ชผ๊ฐœ์ง„ ๋ฌธ์ž๋“ค์— ๋Œ€ํ•˜์—ฌ ๊ณฑ์…ˆ์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
# O(N)
get_fib(max(interval))
for n in interval:
answer *= fib_dict[n]
return answer

0 comments on commit 03ef4b9

Please sign in to comment.