Skip to content

Latest commit

 

History

History
68 lines (49 loc) · 2.35 KB

File metadata and controls

68 lines (49 loc) · 2.35 KB

✨ 완전탐색

Level2 모음 사전 문제

📘 문제 설명

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

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

📕 제한사항

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

📙 입출력 예

word result
"AAAAE" 6
"AAAE" 10
"I" 1563
"EIO" 1189

📒 입출력 예 설명

입출력 예 #1

사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 같습니다. "AAAAE"는 사전에서 6번째 단어입니다.

입출력 예 #2

"AAAE"는 "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 다음인 10번째 단어입니다.

입출력 예 #3

"I"는 1563번째 단어입니다.

입출력 예 #4

"EIO"는 1189번째 단어입니다.

📗 개인적인 문제 해설

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

사전 편찬 순서대로 모든 경우의 수를 저장해야겠다고 생각했다. 편찬 순서를 모두 찾기 위해 dfs를 이용해 사전 순서대로 완성한 후, indexOf로 위치를 찾으면 된다고 생각했다.

✅ 해답코드

function dfs(prev, dic) {
    const alphaList = ['A', 'E', 'I', 'O', 'U'];
    if(prev.length < 5) {
        alphaList.forEach(alpha => {
            const current = prev + alpha; 
            dic.push(current);
            dfs(current, dic);  
        });
    }
}

function solution(word) {
    var answer = 0;
    const dic = [];

    // 길이가 5이하인 경우에 해당하는 모든 단어를 나열한다.
    // 경우의 수는 6**5 - 1 이다.
    dfs('', dic);
    
    // 사전에 등록된 순서를 찾는다.
    return dic.indexOf(word) + 1;
}