Skip to content

Commit 662d43c

Browse files
committed
decode-ways 문제 풀이
1 parent 07c7559 commit 662d43c

File tree

1 file changed

+38
-0
lines changed

1 file changed

+38
-0
lines changed

decode-ways/ymir0804.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
public int numDecodings(String s) {
3+
if (s == null || s.length() == 0 || s.charAt(0) == '0') {
4+
return 0;
5+
}
6+
7+
int n = s.length();
8+
int[] dp = new int[n + 1];
9+
10+
dp[0] = 1; // 빈 문자열을 해석하는 경우의 수는 1
11+
dp[1] = 1; // 첫 글자가 '0'이 아님을 위에서 체크했으므로 1 확정
12+
13+
// 2. DP 수행 (Bottom-Up)
14+
for (int i = 2; i <= n; i++) {
15+
// 현재 문자와 바로 앞 문자 추출
16+
// DP 인덱스 i는 문자열의 i번째 글자(인덱스 i-1)를 의미함
17+
char current = s.charAt(i - 1);
18+
char prev = s.charAt(i - 2);
19+
20+
// Case 1: 한 자리 숫자 해석 (1 ~ 9)
21+
// 현재 숫자가 '1'~'9'라면, 바로 직전 단계(i-1)의 경우의 수를 계승
22+
if (current >= '1' && current <= '9') {
23+
dp[i] += dp[i - 1];
24+
}
25+
26+
// Case 2: 두 자리 숫자 해석 (10 ~ 26)
27+
// 이전 숫자와 합쳐서 값을 계산
28+
int twoDigit = (prev - '0') * 10 + (current - '0');
29+
30+
if (twoDigit >= 10 && twoDigit <= 26) {
31+
dp[i] += dp[i - 2];
32+
}
33+
}
34+
35+
// 3. 결과 반환
36+
return dp[n];
37+
}
38+
}

0 commit comments

Comments
 (0)