Skip to content

Commit 6f9a973

Browse files
committed
Decode Ways Solutions
1 parent 62e5691 commit 6f9a973

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

โ€Ždecode-ways/naringst.js

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/**
2+
* ๋‹ต์•ˆ ์ฐธ๊ณ  ํ’€์ด
3+
* ๐Ÿ’ก ์™œ ๋ชปํ’€์—ˆ์„๊นŒ?
4+
* ํ•œ ์ž๋ฆฌ, ๋‘ ์ž๋ฆฌ ๊ฒฝ์šฐ ์ค‘ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•ด ์กฐ๊ฑด ๋ถ„๊ธฐ๋ฅผ ์ œ๋Œ€๋กœ ๋ชปํ–ˆ์Œ.
5+
*/
6+
7+
var numDecodings = function (s) {
8+
const dp = Array(s.length + 1).fill(0);
9+
10+
// ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
11+
if (s[0] === "0") return 0;
12+
13+
dp[0] = 1;
14+
dp[1] = 1;
15+
16+
for (let i = 2; i <= s.length; i++) {
17+
// 1์ž๋ฆฌ ๊ฐ’ , 2์ž๋ฆฌ ๊ฐ’ ํŒŒ์‹ฑ
18+
const oneDigit = +s.slice(i - 1, i);
19+
const twoDigits = +s.slice(i - 2, i);
20+
// ๊ฐ ๊ฐ’์ด ๊ฐ€๋Šฅํ•œ์ง€ ํŒ๋‹จ: ์—ฌ๊ธฐ๋ฅผ ์ œ๋Œ€๋กœ ์‹์„ ์„ธ์šฐ์ง€ ๋ชปํ–ˆ์Œ
21+
if (oneDigit > 0) dp[i] = dp[i - 1];
22+
if (twoDigits >= 10 && twoDigits <= 26) dp[i] += dp[i - 2];
23+
}
24+
return dp[s.length];
25+
};
26+
27+
/**
28+
* ์ฒ˜์Œ ๋– ์˜ฌ๋ ธ๋˜ ๋ฐฉ์‹์ธ dp๋กœ๋Š” ํ’€๊ธฐ ์–ด๋ ค์šธ ๊ฒƒ ๊ฐ™์•„ ํ’€์ด๋ฅผ ๋‹ค์‹œ ์ƒ๊ฐํ•ด ๋ด„.
29+
* ๋ฌธ์ž๋ฅผ ๋งŒ๋“œ๋Š” ๊ฑธ ์ˆซ์ž๋ฅผ ์นธ๋ง‰์ด๋กœ ๋‚˜๋ˆ„๋Š” ๊ฐœ๋…์œผ๋กœ ์ƒ๊ฐ. ex) 2/5/2/4, 2/52/4
30+
* ๊ทธ๋Ÿฌ๋ฉด ์ˆซ์ž์™€ ์ˆซ์ž ์‚ฌ์ด ์นธ๋ง‰์ด๋ฅผ ๋„ฃ์„์ง€, ๋ง์ง€์˜ ๋ฌธ์ œ๋กœ ๊ท€๊ฒฐ
31+
* 2์˜ (s.length-1)์ œ๊ณฑ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ ๋ฐœ์ƒ
32+
* ๊ทธ ์ค‘ ์•ˆ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๋ฉด ๋‹ต์ด ๋จ.
33+
* */
34+
35+
/**
36+
* @param {string} s
37+
* @return {number}
38+
*/
39+
40+
/**
41+
* NOTE ์ฒซ ํ’€์ด -> ์ž˜๋ชป๋œ ํ’€์ด
42+
* dp๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ•œ์ž๋ฆฌ์”ฉ, ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ์ž๋ฆฟ์ˆ˜์™€ ํ•จ๊ป˜ ๋‘ ์ž๋ฆฌ ์”ฉ ํ™•์ธํ•ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ,
43+
* 2101๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋™์ž‘ํ•˜์ง€ ์•Š์Œ.
44+
*
45+
* */
46+
47+
var numDecodings = function (s) {
48+
let dp = Array(s.length).fill(0);
49+
50+
// ์‹œ์ž‘ ์ˆซ์ž๊ฐ€ 0์ด๋ฉด ๋ถˆ๊ฐ€๋Šฅ -> ์˜ˆ์™ธ ์ฒ˜๋ฆฌ
51+
if (s[0] !== "0") {
52+
dp[0] = 1;
53+
} else {
54+
return 0;
55+
}
56+
57+
for (let i = 0; i < s.length; i++) {
58+
if (i !== s.length - 1 && Number(s[i] + s[i + 1]) <= 26 && s[i] !== "0") {
59+
dp[i + 1] = dp[i] + 1;
60+
} else if (s[i + 1] === "0" || Number(s[i] + s[i + 1]) > 26) {
61+
dp[i + 1] = dp[i];
62+
}
63+
}
64+
return dp[s.length - 1];
65+
};

0 commit comments

Comments
ย (0)