728x90
📝 문제 설명
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
⚠️ 제한사항
- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
🖨 입출력 예
word | result |
---|---|
"AAAAE" |
6 |
"AAAE" |
10 |
"I" |
1563 |
"EIO" |
1189 |
📂 분류
구현
💡 풀이
문자가 정해진 단어 안에서 규칙을 찾기 위해 아래와 같이 직접 손으로 적어가면서 규칙을 찾아봤다.
1 A
2 AA
3 AAA
4 AAAA
5 AAAAA
6 AAAAE
7 AAAAU
.
.
.
10 AAAE
11 AAAEA
.
.
.
16 AAAI
.
.
.
22 AAAO
.
.
.
28 AAAU
.
.
.
34 AAE
마지막 자리면 문자가 바뀔 때마다 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 MAPPING = "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] * MAPPING.indexOf(word.charAt(i)));
}
return answer;
}
}
728x90
'Algorithm > 프로그래머스' 카테고리의 다른 글
[JAVA 풀이] 프로그래머스 - 이진 변환 반복하기 (Level2) (0) | 2022.04.07 |
---|---|
[JAVA 풀이] 프로그래머스 - 캐시 (2018 KAKAO BLIND RECRUITMENT) (0) | 2022.04.07 |
[JAVA 풀이] 프로그래머스 - 전력망을 둘로 나누기 (Level 2) (0) | 2022.04.01 |
[JAVA 풀이] 프로그래머스 - 교점에 별 만들기 (Level2) (0) | 2022.03.31 |
[JAVA 풀이] 프로그래머스 - 구명보트 (Level2) (0) | 2022.03.23 |