|
| 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