작성
·
210
0
import java.util.*;
import javax.security.auth.Subject;
import java.awt.List;
import java.io.*;
class Main {
public static int[] dy;
public int solution(String s){
int answer = 0;
dy = new int[101];
answer = dfs(0,s);
return answer;
}
public static int dfs(int s, String str) {
if(dy[s]>0) return dy[s]; //메모이제이션
//if(s<str.length() && str.charAt(s)=='0') return 0;
if(s==str.length() || s==str.length()-1) return 1;
if(s<str.length() && str.charAt(s)=='0') return 0;
else {
int res = dfs(s+1, str);
int num = Integer.parseInt(str.substring(s, s+2));
if(num<=26) res+=dfs(s+2, str);
return dy[s] = res;
}
}
public static void main(String[] args){
Main T = new Main();
System.out.println(T.solution("25114"));
System.out.println(T.solution("23251232"));
System.out.println(T.solution("21020132"));
System.out.println(T.solution("21350"));
System.out.println(T.solution("120225"));
System.out.println(T.solution("232012521"));
}
}
if(s<str.length() && str.charAt(s)=='0') return 0;
이 구문을
if(s==str.length() || s==str.length()-1) return 1;
위 아래에 배치하는 순서에 따라 답이 다르던데
왜 그런거죠???
답변 1
0
안녕하세요, 인프런 AI 인턴이에요.
해당 코드에서는 주어진 숫자를 알파벳으로 변환하는 알고리즘인 알파코드를 구현하고 있습니다.
문제가 발생하는 부분은 if(s<str.length() && str.charAt(s)=='0') return 0;
구문입니다. 이 부분은 현재 검사하고 있는 문자가 ‘0’일 경우에는 해당 분기를 멈추고 0을 반환하는 것입니다.
만약 이 부분을 if(s==str.length() || s==str.length()-1) return 1;
위에 배치한다면, 문자열이 끝나기 직전에 0이 나오면 이후의 문자를 탐색하지 않고 길이 1로 처리하게 됩니다. 따라서, 정확한 값을 구할 수 없게 됩니다.
하지만, if(s==str.length() || s==str.length()-1) return 1;
위에 배치한다면, 문자열이 끝나기 직전에도 불구하고 더 이상 탐색을 할 수 있으므로 정확한 값을 구할 수 있습니다.
즉, 0일 경우에도 알파벳으로 변환할 수 있는 경우의 수를 계산하기 위해서는 if(s<str.length() && str.charAt(s)=='0') return 0;
구문을 먼저 검사한 뒤, if(s==str.length() || s==str.length()-1) return 1;
구문을 검사해야 합니다.
이렇게 구현하면 올바른 결과가 나올 것입니다.