https://school.programmers.co.kr/learn/courses/30/lessons/84512
문제 설명
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
제한사항- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
풀이코드
class Solution {
public int solution(String word) {
String s = "AEIOU";
int answer = word.length();
int[] x = {781,156,31,6,1};
for(int i=0,size=word.length();i<size;i++) {
answer+=x[i]*s.indexOf(word.charAt(i));
}
return answer;
}
}
문제설명
문제는 위 수열의 규칙을 찾는 게 가장 중요한 문제이다.
푸는데.. 힘드러따...
순서대로 식을 써보자면
1: A
2. AA
3. AAA
4. AAAA /// 10. AAAE 11 AAAEA 12 AAAEE 13 AAAEI 14 AAAEO 15 AAAEU
5. AAAAA 6. AAAAE 7. AAAAI 8. AAAAO 9. AAAAU
4. AAAA -> ///11 AAAEA 12 AAAEE 13 AAAEI 14 AAAEO 15. AAAEU
4. AAAA -> /// 5. AAAAA 6. AAAAE 7. AAAAI 8. AAAAO 9. AAAAU
우선
4번쨰 값인 AAAA에서 뒤에 A, E, I, O, U 로 변할수록
5. AAAAA 6. AAAAE 7. AAAAI 8. AAAAO 9.AAAAU 1씩 증가한다.
이건 다른 뒤의 값에서도 마찬가지이다.
11. AAAEA -> 12. AAAEE 13 AAAEI 14 AAAEO 15. AAAEU 처럼
그럼 이제 맨 뒤의 값이 있을 수록 1개씩 증가하며,
4번쨰 자리까지의 값을 구한다음 1을 증가시키면 그 뒤를 알 수 있다는 것을 알 수 있다.
그럼 이제 4번째 자리들이 변하는 것에 따른 규칙을 찾아야 한다.
4 AAAA 10. AAAE 16. AAAI .... (22 AAAO 28 AAAU
앞에서 쓴 규칙에 따라서 네번쨰 자리가 바뀌는 데에는 6을 더하면 된다. 5개를 돌리는 개수+아무것도 없을때 해서 6씩 변하게 된다.
그렇다면 4번쨰 자리위 수를 구하는 것에도 3번쨰 자리 3 (AAA) + 1+6 하면 그 다음 값을 구할 수 있다.
그럼 3번쨰 자리의 규칙은
28.AAAU 29. AAAUA 30 AAAUE 31 AAAUI 32 AAAUO 33 AAAUU -> 34 AAE.
3 AAA -> 34. AAE 31씩 증가하게 된다.
1-> 6-> 31 은 규칙적으로 5개 모음이 돌아가는 것에 그 전 값*5 +1 이 된다.
그럼 그 다음은 (31*5)=155 +1 해서 156 그 다음값은 156*5 = 780 + 1 해서 781 이 된다.
이걸 통해서
1. A -> 782 B -> 1563 I .. 이런 식을 구할 수 있다.
이값을 쓰는 방법으로
첫 값이 0이 아니므로 처음의 값들을 다 구해준다. 이 게
위와 같은 식이 되고, 그 다음에
answer 에 2번쨰 자리 값이 어떤게 있다면 그 값의, A라면. 0 , E는 1, I=2, O =3 U=4 를 곲하는 식으로 더해준다.
그 식을 구현한게
위 코드가 되는 것이다. 여기서 x = {781,156,31,6,1}이 되는거고,
s = AEIOU가 된다.