본문 바로가기
자료구조 & 알고리즘/문제풀이

모음 사전 - 프로그래머스 (Java, Level 2)

by 넬준 2022. 2. 25.

풀이 1. 각 자리수마다 넘어가는 숫자의 규칙

 

public int solution(String word) {
    int answer = 0;

    char[] charWord = word.toCharArray();

    int[] intArr = {781, 156, 31, 6, 1};

    for(int i=0; i<charWord.length; i++) {
        int num = -1;
        switch(charWord[i]) {
            case 'A' : num = 0;
            break;
            case 'E' : num = 1;
            break;
            case 'I' : num = 2;
            break;
            case 'O' : num = 3;
            break;
            case 'U' : num = 4;
            break;
        }//switch case end

        //intArr[i]*num은 자기자신 직전까지의 번호
        //따라서 +1 해줘야한다.
        answer += intArr[i] * num + 1;
    }//for end

    return answer;
}//solution() end

 

 

풀이 2. dfs 풀이

 

List<String> list = new ArrayList<>();

//dfs 풀이1
public int solutionDFS(String word) {
    dfs("", 0);
    return list.indexOf(word);
}//solutionDFS() end

public void dfs(String str, int length) {
    if(length>5) return;
    list.add(str);
    for(int i=0; i<5; i++) {
        dfs(str+"AEIOU".charAt(i), length+1);
    }//for end
}//dfs() end

 

 

시간이 조금 걸리길래 String 작업을 StringBuilder로 해봤다.

 

 

풀이 3. dfs 풀이 + StringBuilder

 

List<String> list = new ArrayList<>();
StringBuilder sb = new StringBuilder();

public int solutionDFS2(String word) {
    dfs2();
    return list.indexOf(word);
}//solutionDFS2() end

public void dfs2() {
    if(sb.length()>5) return;
    list.add(sb.toString());
    for(int i=0; i<5; i++) {
        sb.append("AEIOU".charAt(i));
        dfs2();
        sb.deleteCharAt(sb.length()-1);
    }//for end
}//dfs() end

 

 

조금 빨라진 것을 알 수 있다.

댓글