[프로그래머스] 모음 사전 (DFS)

최지나·2024년 5월 13일
2

코딩테스트

목록 보기
152/154

문제

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.

단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.

제한사항

word의 길이는 1 이상 5 이하입니다.
word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.

입출력 예

wordresult
"AAAAE"6
"AAAE"10
"I"1563
"EIO"1189

생각

  • DFS를 사용하여 가능한 모든 조합을 탐색 -> target과 일치할 때까지 인덱스 cnt를 증가시킴
  • 타깃 일치 또는 글자 길이 5 이상 시 탐색 종료
DFS(cur #현재까지의 string + c #이번에 탐색할 char)

  • 이전에 (약 6개월 전,,,) 동일한 문제를 풀었던 기록 => 모음 사전 이전 풀이이 있어 이전 풀이와도 비교해보았다. 생성 가능한 모든 단어를 리스트에 저장한 뒤 정렬하는 방식이라 확실히 메모리 사용량이 상당히 높았던 풀이라고 생각한다. 풀이가 개선된 걸 볼 때 뿌듯한 것 같다!!

코드

class Solution {
    private static final char[] vowels = {'A', 'E', 'I', 'O', 'U'};
    private boolean found = false;
    private int cnt = 0;
    
    
    private void DFS(String cur, String target){
        if (cur.equals(target)){
            found = true;
            return;
        } 
        if (cur.length() >= 5) return;
        
        for (char c : vowels){
            if (!found){
                cnt++;
                DFS(cur + c, target);
            }
        }
    }
    
    public int solution(String word) {
        DFS("", word); 
        return cnt;
    }
}

문제 출처

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글