Skip to content

Commit 04c78a6

Browse files
committed
feat: decode ways solution
1 parent e9606ad commit 04c78a6

File tree

1 file changed

+43
-0
lines changed

1 file changed

+43
-0
lines changed

โ€Ždecode-ways/smosco.jsโ€Ž

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* Decode Ways
3+
*
4+
* ํ•ต์‹ฌ ์•„์ด๋””์–ด:
5+
* - ์ˆซ์ž ๋ฌธ์ž์—ด์„ 1-26(A-Z)๋กœ ๋””์ฝ”๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ
6+
* - DP[i] = i๋ฒˆ์งธ ์œ„์น˜๊นŒ์ง€์˜ ๋””์ฝ”๋”ฉ ๋ฐฉ๋ฒ• ์ˆ˜
7+
* - ๊ฐ ์œ„์น˜์—์„œ 2๊ฐ€์ง€ ์„ ํƒ ๊ฐ€๋Šฅ:
8+
* 1) ํ•œ ์ž๋ฆฌ ์ˆซ์ž๋กœ ํ•ด์„ (1-9)
9+
* 2) ๋‘ ์ž๋ฆฌ ์ˆซ์ž๋กœ ํ•ด์„ (10-26)
10+
*
11+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(n) - ๋ฌธ์ž์—ด์„ ํ•œ ๋ฒˆ๋งŒ ์ˆœํšŒ
12+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(n) - dp ๋ฐฐ์—ด ์‚ฌ์šฉ
13+
*/
14+
15+
function numDecodings(s) {
16+
// ์˜ˆ์™ธ ์ฒ˜๋ฆฌ: ๋นˆ ๋ฌธ์ž์—ด์ด๊ฑฐ๋‚˜ '0'์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๋ถˆ๊ฐ€๋Šฅ
17+
if (!s || s[0] === '0') return 0;
18+
19+
const n = s.length;
20+
const dp = new Array(n + 1).fill(0);
21+
22+
// ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •
23+
dp[0] = 1; // ๋นˆ ๋ฌธ์ž์—ด (base case)
24+
dp[1] = 1; // ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž (์ด๋ฏธ '0' ์ฒดํฌ ์™„๋ฃŒ)
25+
26+
// i๋ฒˆ์งธ ์œ„์น˜๊นŒ์ง€์˜ ๋””์ฝ”๋”ฉ ๋ฐฉ๋ฒ• ์ˆ˜ ๊ณ„์‚ฐ
27+
for (let i = 2; i <= n; i++) {
28+
// 1) ํ•œ ์ž๋ฆฌ ์ˆซ์ž๋กœ ํ•ด์„ (1~9๋งŒ ๊ฐ€๋Šฅ, 0์€ ๋‹จ๋… ๋ถˆ๊ฐ€)
29+
const oneDigit = s[i - 1];
30+
if (oneDigit !== '0') {
31+
dp[i] += dp[i - 1]; // ์ด์ „๊นŒ์ง€์˜ ๋ชจ๋“  ๋ฐฉ๋ฒ•์— ํ˜„์žฌ ์ˆซ์ž ์ถ”๊ฐ€
32+
}
33+
34+
// 2) ๋‘ ์ž๋ฆฌ ์ˆซ์ž๋กœ ํ•ด์„ (10~26๋งŒ ๊ฐ€๋Šฅ)
35+
const twoDigits = s[i - 2] + s[i - 1];
36+
const twoDigitsNum = parseInt(twoDigits);
37+
if (twoDigitsNum >= 10 && twoDigitsNum <= 26) {
38+
dp[i] += dp[i - 2]; // i-2๊นŒ์ง€์˜ ๋ชจ๋“  ๋ฐฉ๋ฒ•์— ๋‘ ์ž๋ฆฌ ์ˆซ์ž ์ถ”๊ฐ€
39+
}
40+
}
41+
42+
return dp[n];
43+
}

0 commit comments

Comments
ย (0)