프로그래머스 모음 사전 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;
}