제출 코드
- 사용 알고리즘 : 수학(경우의 수..?)
- 로직
-
주어진 문자열의 각 자리수의 사전순서를 숫자로 저장한 배열 생성
EX) “AEIOU” → {1, 2, 3, 4, 5}
- 앞에 올수 있는 단어들에대하여, 단어 길이별로 그 수를 셈
-
앞에 올 단어 길이가 고정되었으니, 앞자리부터 각 자리수 이전에 오는 단어수 세기
EX) 배열이 { ${a, b, c, d, e}$ }일 경우, 단어길이가 3인 경우의 수는
$(a-1) * 5 * 5$
- $1 * (b-1) * 5$
- $1 * 1 * (c-1)$ 이다.
-
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Solution {
int aeiou(char c) {
switch(c){
case 'A': return 1;
case 'E': return 2;
case 'I': return 3;
case 'O': return 4;
case 'U': return 5;
}
return 0;
}
public int solution(String word) {
int[] words = new int[5];
for(int i=0; i<5; i++) {
if(i<word.length()) words[i] = aeiou(word.charAt(i));
else words[i] = 0;
}
int answer = 0;
for(int i=1; i<=5; i++) { // 단어의 길이
for(int j=0; j<i; j++) { // 앞자리부터, 각 자리수 이전에 오는 단어수 세기
if(words[j]==0) continue;
answer += (words[j]-1) * Math.pow(5, i-j-1);
}
if(i<=word.length()) answer++;
}
return answer;
}
}