본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 모음사전

by 현장 2026. 1. 13.

-Code

import java.util.*;

class Solution {
    static char[] vowels = {'A', 'E', 'I', 'O', 'U'};
    static int answer;
    
    public int solution(String word) {
        answer = 0;
        // 문자열을 비교하기 위해 sb 사용
        StringBuilder sb = new StringBuilder();
        // DFS로 탐색
        DFS(0, 5, sb, word);
        return answer;
    }
    
    private static boolean DFS(int depth, int length, StringBuilder sb, String target) {
        // 내가 찾는 문자열이면 true로 탈출
        if (sb.toString().equals(target)) {
            return true;
        }
        // 아니면 카운트 증가
        answer++;
        // 길이와 같으면 카운트 증가하고 다음 단어 없으므로 탈출
        if (depth == length) {
            return false;
        }
        // 모음을 돌면서 백트래킹
        for (char vowel : vowels) {
            // sb에 더하고 검사
            sb.append(vowel);
            // true가 반환되면 값이 구해진 것이므로 탈출
            if (DFS(depth + 1, length, sb, target)) {
                return true;
            }
            // 검사 다 끝나면 삭제
            sb.deleteCharAt(depth);
        }
        // 다 돌았으면 이전 길이로 이동
        return false;
    }
}

처음에 for문을 사용해야 하나 하다가 길이가 달라지고 그거에 따라 stack 형식으로 값이 변화하는 것을 힌트롤 받고 DFS로 다음날 풀어보았습니다. 추가적으로 StringBilder가 메모리를 덜 차지하나 처음에 deleteCharAt 가 있는지 모르고 하다가 찾아보니 하나를 지우는 방법이 존재해서 적용했습니다.