https://programmers.co.kr/learn/courses/30/lessons/84512
코딩테스트 연습 - 모음사전
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니
programmers.co.kr
[ 풀이 ]
처음엔 눈으로만 봤을 때는 도저히 점화식을 구할 수가 없어서 직접 손으로 하나하나 적어보면서 순서를 파악해봤다.
A - 1
AA - 2
AAA - 3
AAAA - 4
AAAAA - 5
AAAAE - 6
AAAAI - 7
AAAAO - 8
AAAAU - 9
AAAE - 10
여기까지 봤을 때 word의 5번째 알파벳은 1씩 증가하는 것을 알 수 있다. 그런데 word의 4번째 위치의 알파벳의 경우 A에서 E로 넘어갈 때 4 -> 10 으로 6만큼 증가하였다.( 6 = 1 * 5 + 1 ) 좀 더 나열해보면서 확인해봤다.
AAAEA - 11
AAAEE - 12
AAAEI - 13
AAAEO - 14
AAAEU - 15
AAAI - 16
마찬가지로 4번째 위치의 알파벳의 경우 E 에서 I 로 넘어갈 때 10 -> 16으로 6만큼 증가하였다.
계속해서 나열해본 결과
AAA - 3
.
.
.
AAE - 34
>> 3번째 알파벳의 경우 A 에서 E로 넘어갈 때 31 만큼 증가하였다. ( 31 = 6 * 5 + 1 )
여기서 규칙성을 알 수 있었는데 word의 임의의 위치에서 알파벳이 다음 알파벳으로 넘어갈 때 증가량은 다음과 같다
= ( 이전 위치의 증가량 * 5 ) + 1
위를 계속 적용시켜보면 맨 앞의 알파벳의 증가량은 156 * 5 + 1 이 나온다.
[ 전체 코드 ]
class Solution {
public int solution(String word) {
int answer = 0;
int sum = 156*5 + 1;
String dict = "AEIOU";
for( int i = 0 ; i < word.length() ; i++ ){
// dict.indexOf( word.charAt( i ) ) 는 알파벳 A,E,I,O,U 가 갖는 사전적 순서를 구해줌
answer = answer + sum * dict.indexOf( word.charAt( i ) ) + 1 ;
sum = ( sum - 1 ) / 5; // word의 그다음 위치의 증가량
}
return answer;
}
}
'코딩 테스트 공부 > 프로그래머스' 카테고리의 다른 글
| [ JAVA ] 프로그래머스 - [1차] 캐시 (0) | 2022.06.27 |
|---|---|
| [ JAVA ] 프로그래머스 - 2 x n 타일링 (0) | 2022.06.23 |
| [ JAVA ] 프로그래머스 - 2개 이하로 다른 비트 (0) | 2022.06.17 |
| [ JAVA ] 프로그래머스 - 쿼드압축 후 개수 세기 (0) | 2022.06.17 |
| [ JAVA ] 프로그래머스 - k 진수에서 소수 개수 구하기 (0) | 2022.06.16 |