인프런 커뮤니티 질문&답변

vkfksaosldk님의 프로필 이미지
vkfksaosldk

작성한 질문수

자바 코딩테스트 - it 대기업 유제

6. "알파코드" 코드 해설

알파코드 질문드립니다.

작성

·

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; 구문을 검사해야 합니다.

이렇게 구현하면 올바른 결과가 나올 것입니다.

vkfksaosldk님의 프로필 이미지
vkfksaosldk

작성한 질문수

질문하기