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

OOING·2023년 9월 4일
0

백준+알고리즘 공부

목록 보기
38/75

모음 사전

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

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

제한사항

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

코드

#include <string>
#include <vector>
using namespace std;

string c[5] = {"A", "E", "I", "O", "U"};
string word;
int now = 0, answer = 0;

int dfs(int n, string s) {
    if(answer != 0) return answer;
    for(int i = 0; i < 5; i++) {
        ++now;
        string ss = s + c[i];
        if(ss == word) {
            answer = now;
            return answer;
        }
        if(n != 4) dfs(n + 1, ss);
    }
    return answer;
    
}
int solution(string word_) {
    word = word_;
    dfs(0, "");
    return answer;
}

기타

무작정 모음을 결합해서 만들었다. 현재 만들고있는(?) 문자열의 길이가 5가 아닌 경우 뒤에 문자를 붙이고( dfs(n + 1, ss) , 문자열의 길이가 5인 경우는 맨 뒤 문자를 바꾸도록 구현했다.
now의 개수를 증가시키며, 현재 문자열 ssword 가 같은 경우 answer의 값을 update 해주었다.

여기서 문제점...
본인은 재귀 함수를 잘 못 사용하는 사람이라.. now와 answer 변수 두 개를 두고, 현재 문자열이 word와 일치하는 경우 계속 answer를 return 하도록 했다. 이게 무슨 말이냐하면, AAAAE 를 찾고자 할 때, 현재 문자열이 AAAAE 이면 dfs가 바로 끝나고 solution에서 정답을 return하는게 아니라, dfs의 재귀가 끝날 때까지 계속 answer를 return 하는 것이다. 즉, 불필요한 연산이 많이 섞인다..

profile
HICE 19

0개의 댓글

관련 채용 정보