https://programmers.co.kr/learn/courses/30/lessons/84512
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다. 단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 반환하면 됩니다.
정해진 규칙을 찾기위해 직접 손으로 써내려가 보았다.
1 A
2 AA
3 AAA
4 AAAA
5 AAAAA
6 AAAAE
7 AAAAI
.
.
.
10 AAAE
11 AAAEA
.
.
.
16 AAAI
.
.
.
34 AAE
5번째 자리에서 문자가 바뀌는 경우 : 1씩 증가
4번째 자리에서 문자가 바뀌는 경우 : 6씩 증가
3번째 자리에서 문자가 바뀌는 경우 : 31씩 증가
. . .
이를 함수로 풀어내어보면??
x 가 0이 아닐 때 : f(x) = f(x - 1) + 5^x
f(0) = 1
f(1) = 1 + 5^1 = 6
f(2) = 6 + 5^2 = 31
f(3) = 31 + 5^3 = 156
f(4) = 156 + 5^4 = 781
위와 같은식이 생긴다.
이를 각 자릿수에대한 증가율과 대치된 문자의 값을 곱한 다음 answer에 더해주면 된다.
class Solution {
static final String Alpabet = "AEIOU";
static final int[] RATE_OF_INCREASE = {781, 156, 31, 6, 1};
public int solution(String word) {
int answer = word.length();
for (int i = 0; i < word.length(); i++) {
answer += (RATE_OF_INCREASE[i] * Alpabet.indexOf(word.charAt(i)));
}
return answer;
}
}