Skip to content

Commit

Permalink
Decode Ways Solutions
Browse files Browse the repository at this point in the history
  • Loading branch information
naringst committed Aug 24, 2024
1 parent 62e5691 commit 6f9a973
Showing 1 changed file with 65 additions and 0 deletions.
65 changes: 65 additions & 0 deletions decode-ways/naringst.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,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];
};

0 comments on commit 6f9a973

Please sign in to comment.