File tree Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Expand file tree Collapse file tree 1 file changed +43
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You canโt perform that action at this time.
0 commit comments