프로그래머스/완전탐색

[프로그래머스] Level2 : 모음사전 (JAVA)

믕비 2025. 4. 24. 17:23
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/84512?language=java

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

[풀이과정]

처음엔 복잡하게 풀었다가 생각을 바꾸고 훨씬 간단한 코드로 통과했다.

DFS 개념을 가져다가 풂.

 

[코드]

class Solution {
    static int answer = 0;
    static int number = 0;
    static String[] alphabet = {"A", "E", "I", "O", "U"};

    public int solution(String word) {
        plus("", word);
        return answer;
    }

    static void plus(String current, String target) {
        if (current.equals(target)) {
            answer = number;
            return;
        }

        if (current.length() == 5) return;

        for (int i = 0; i < 5; i++) {
            number++;
            plus(current + alphabet[i], target);
            if (answer != 0) return;  // 이미 찾았으면 빠르게 종료
        }
    }
}

 

[코드 - 97.5점]

U가 하나일 때가 예외가 돼서 테케1을 통과하지 못 한 것 같다.

alphabet 배열은 만들어놓고 쓰지를 않음..

뭔가 키가 될 것 같아서 계속 들여다보다가 정답 구조를 생각해냈다.

class Solution {
    static StringBuilder numStr = new StringBuilder("A");
    
    public int solution(String word) {
        char[] alphabet = {'A', 'E', 'I', 'O', 'U'};
        
        int num = 1;
        
        while(true){
            //1. 다섯글자가 아니면
            if(numStr.length() < 5){
                numStr.append("A");
                num++;
            }
            //2. 다섯글자이면
            else{
                char lastChar = numStr.charAt(numStr.length() - 1);
                changeChar(lastChar);
                num++;
                
            }
            if(numStr.toString().equals(word)){
                break;
            }
        }
        
        return num;
    }
    
    static void changeChar(char lastChar){
        switch(lastChar){
            case 'A':
                numStr.replace(numStr.length() - 1, numStr.length(), "E");
                break;
            case 'E':
                numStr.replace(numStr.length() - 1, numStr.length(), "I");
                break;
            case 'I':
                numStr.replace(numStr.length() - 1, numStr.length(), "O");
                break;
            case 'O':
                numStr.replace(numStr.length() - 1, numStr.length(), "U");
                break;
            case 'U':
                numStr.deleteCharAt(numStr.length() - 1);
                changeChar(numStr.charAt(numStr.length() - 1));
                break;                        
        }
    }
}
반응형