forked from DaleStudy/leetcode-study
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnaringst.js
65 lines (55 loc) ยท 1.85 KB
/
naringst.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/**
* ๋ต์ ์ฐธ๊ณ ํ์ด
* ๐ก ์ ๋ชปํ์์๊น?
* ํ ์๋ฆฌ, ๋ ์๋ฆฌ ๊ฒฝ์ฐ ์ค ๊ฐ๋ฅํ ๊ฒฝ์ฐ์ ๋ํด ์กฐ๊ฑด ๋ถ๊ธฐ๋ฅผ ์ ๋๋ก ๋ชปํ์.
*/
var numDecodings = function (s) {
const dp = Array(s.length + 1).fill(0);
// ์์ธ ์ฒ๋ฆฌ
if (s[0] === "0") return 0;
dp[0] = 1;
dp[1] = 1;
for (let i = 2; i <= s.length; i++) {
// 1์๋ฆฌ ๊ฐ , 2์๋ฆฌ ๊ฐ ํ์ฑ
const oneDigit = +s.slice(i - 1, i);
const twoDigits = +s.slice(i - 2, i);
// ๊ฐ ๊ฐ์ด ๊ฐ๋ฅํ์ง ํ๋จ: ์ฌ๊ธฐ๋ฅผ ์ ๋๋ก ์์ ์ธ์ฐ์ง ๋ชปํ์
if (oneDigit > 0) dp[i] = dp[i - 1];
if (twoDigits >= 10 && twoDigits <= 26) dp[i] += dp[i - 2];
}
return dp[s.length];
};
/**
* ์ฒ์ ๋ ์ฌ๋ ธ๋ ๋ฐฉ์์ธ dp๋ก๋ ํ๊ธฐ ์ด๋ ค์ธ ๊ฒ ๊ฐ์ ํ์ด๋ฅผ ๋ค์ ์๊ฐํด ๋ด.
* ๋ฌธ์๋ฅผ ๋ง๋๋ ๊ฑธ ์ซ์๋ฅผ ์นธ๋ง์ด๋ก ๋๋๋ ๊ฐ๋
์ผ๋ก ์๊ฐ. ex) 2/5/2/4, 2/52/4
* ๊ทธ๋ฌ๋ฉด ์ซ์์ ์ซ์ ์ฌ์ด ์นธ๋ง์ด๋ฅผ ๋ฃ์์ง, ๋ง์ง์ ๋ฌธ์ ๋ก ๊ท๊ฒฐ
* 2์ (s.length-1)์ ๊ณฑ์ ๊ฒฝ์ฐ์ ์ ๋ฐ์
* ๊ทธ ์ค ์๋๋ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๋ฉด ๋ต์ด ๋จ.
* */
/**
* @param {string} s
* @return {number}
*/
/**
* NOTE ์ฒซ ํ์ด -> ์๋ชป๋ ํ์ด
* dp๋ฅผ ์ฌ์ฉํด์ ํ์๋ฆฌ์ฉ, ๊ทธ๋ฆฌ๊ณ ๋ค์ ์๋ฆฟ์์ ํจ๊ป ๋ ์๋ฆฌ ์ฉ ํ์ธํด ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค๊ณ ์๊ฐํ๋๋ฐ,
* 2101๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์ ๋์ํ์ง ์์.
*
* */
var numDecodings = function (s) {
let dp = Array(s.length).fill(0);
// ์์ ์ซ์๊ฐ 0์ด๋ฉด ๋ถ๊ฐ๋ฅ -> ์์ธ ์ฒ๋ฆฌ
if (s[0] !== "0") {
dp[0] = 1;
} else {
return 0;
}
for (let i = 0; i < s.length; i++) {
if (i !== s.length - 1 && Number(s[i] + s[i + 1]) <= 26 && s[i] !== "0") {
dp[i + 1] = dp[i] + 1;
} else if (s[i + 1] === "0" || Number(s[i] + s[i + 1]) > 26) {
dp[i + 1] = dp[i];
}
}
return dp[s.length - 1];
};