[프로그래머스] 모음사전 - JavaScript

Algorithm
|
2024-09-22

모음사전

프로그래머스 Level 2


📚 문제 설명

사전에 알파벳 모음 '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번째 단어입니다.


📝 작성 코드

function solution(word) {
    let alphabet = ["A", "E", "I", "O", "U"];
    var dict = [];

    function recursion(str, n) {
        dict.push(str);

        if (n === 5) return;
        
        // 재귀 부분
        for (let i = 0; i < 5; i++) {
            recursion(str + alphabet[i], n + 1);
        }
    }
    
    recursion("", 0);
    dict.sort();
    
    return dict.indexOf(word);
}

알파벳 모음을 담은 배열 alphabet과 모음으로 만든 단어를 저장할 dict 배열을 선언한다.

문자열 str과 문자열의 길이 n를 매개변수로 받는 재귀 함수 recursion으로 모음으로 구성된 문자열을 조합해서 dict 배열에 저장한다. 재귀적으로 생성된 문자열은 길이가 5 이하일 때만 dict 배열에 추가된다.

recursion이 종료되면 dict 배열을 사전 순으로 정렬한다. JavaScript는 사전 순으로 정렬되기 때문에 알파벳 순서로 정렬된다.

정렬된

dict 배열에서 입력받은 word가 몇 번째에 있는지 indexOf 메서드를 사용하여 찾은 후 반환한다.


⏰ 걸린 시간

테스트 1 〉 통과 (0.96ms, 33.7MB) 테스트 2 〉 통과 (1.24ms, 33.7MB) 테스트 3 〉 통과 (1.15ms, 33.7MB) 테스트 4 〉 통과 (1.19ms, 33.6MB) 테스트 5 〉 통과 (1.13ms, 33.6MB) 테스트 6 〉 통과 (0.65ms, 33.7MB) 테스트 7 〉 통과 (0.71ms, 33.6MB) 테스트 8 〉 통과 (0.68ms, 33.6MB) 테스트 9 〉 통과 (0.63ms, 33.7MB) 테스트 10 〉 통과 (1.08ms, 33.6MB) 테스트 11 〉 통과 (0.63ms, 33.6MB) 테스트 12 〉 통과 (0.70ms, 33.8MB) 테스트 13 〉 통과 (0.66ms, 33.6MB) 테스트 14 〉 통과 (0.87ms, 33.6MB) 테스트 15 〉 통과 (0.66ms, 33.7MB) 테스트 16 〉 통과 (0.65ms, 33.6MB) 테스트 17 〉 통과 (0.67ms, 33.7MB) 테스트 18 〉 통과 (0.65ms, 33.6MB) 테스트 19 〉 통과 (0.65ms, 33.7MB) 테스트 20 〉 통과 (0.67ms, 33.6MB) 테스트 21 〉 통과 (0.62ms, 33.7MB) 테스트 22 〉 통과 (0.63ms, 33.6MB) 테스트 23 〉 통과 (0.63ms, 33.6MB) 테스트 24 〉 통과 (1.09ms, 33.6MB) 테스트 25 〉 통과 (1.12ms, 33.6MB) 테스트 26 〉 통과 (0.70ms, 33.7MB) 테스트 27 〉 통과 (0.64ms, 33.6MB) 테스트 28 〉 통과 (0.70ms, 33.7MB) 테스트 29 〉 통과 (0.67ms, 33.6MB) 테스트 30 〉 통과 (0.65ms, 33.6MB) 테스트 31 〉 통과 (1.11ms, 33.6MB) 테스트 32 〉 통과 (0.63ms, 33.7MB) 테스트 33 〉 통과 (0.64ms, 33.7MB) 테스트 34 〉 통과 (0.64ms, 33.6MB) 테스트 35 〉 통과 (0.67ms, 33.6MB) 테스트 36 〉 통과 (0.63ms, 33.6MB) 테스트 37 〉 통과 (0.67ms, 33.8MB) 테스트 38 〉 통과 (0.90ms, 33.6MB) 테스트 39 〉 통과 (0.63ms, 33.7MB)

🐶 김윤 | 프론트엔드 개발자

© 2024 Yoon Kim. All rights reserved. 

🐶 김윤 | 프론트엔드 개발자

© 2024 Yoon Kim. All rights reserved. 

🐶 김윤 | 프론트엔드 개발자

© 2024 Yoon Kim. All rights reserved.