Skip to content

Commit da5bc9a

Browse files
authored
Merge pull request #2268 from yeonjukim164/main
[yeonjukim164] WEEK 09 solutions
2 parents e4a58e7 + 662d43c commit da5bc9a

1 file changed

Lines changed: 38 additions & 0 deletions

File tree

β€Ž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)