프로그래머스 모음 사전 JavaScript

2023년 1월 30일

프로그래머스 모음 사전

문제 풀이

손으로 적다보면 규칙을 찾을 수 있는 문제
1: A
2: AA
3: AAA
4: AAAA
5: AAAAA
6: AAAAB
. . .
10: AAAE
. . .
16: AAAI
. . .
34: AAE
. . .
65: AAI
. . .
158: AE
. . .
782: E
. . .
1563: I
. . .

이 규칙을 식으로 정리하면 x 번째 자리의 값이 변할 때 증가하는 값: f(x) = f(x-1) + (x-1)**5 이 된다. (처음부터 x 번째 자리에 A가 있다고 생각함)

f(1) = 1
f(2) = 1 + 5 = 6
f(3) = 6 + 25 = 31
f(4) = 31 + 125 = 156
f(5) = 156 + 625 = 782

word가 "IAIOU" 이라면 2x781 + 0x156 + 2x31 + 3x6 + 4x1 = 1646 이 된다.
이 식은 자리에 A가 기본적으로 있는 것으로 간주하기에 word의 길이만큼 더해야 한다.
따라서 "IAIOU"는 사전에서 1651번째 단어다.

solution.js
function solution(word) {
    // 1: 1, 2: 6, 3: 6+25 = 31, 4: 31+125 = 156, 5: 156+625 = 781  
    const digits = [781, 156, 31, 6, 1];
    const dic = ['A', 'E', 'I', 'O', 'U'];

    const answer = word.split('').reduce((acc, cur, idx) => {
        return acc += digits[idx] * dic.findIndex((item) => item === cur)
    }, 0);
    return answer + word.length;
}

댓글