알고리즘 공부/위클리 챌린지

프로그래머스 위클리 챌린지 5주차 - java

철매존 2021. 8. 30. 22:52
728x90

문제 설명

1. 'A' 'E' 'I' 'O' 'I' 다섯글자로 단어를 만들수 있다.

2. 단어 길이는 5개 이하이며, A AA AAA AAAA AAAAA AAAAE ... 이런 순서로 진행된다.

3. 단어가 주어지면, 이게 몇번째 단어인지 return하면 된다.

풀이 과정

 1. 문제의 테스트 케이스를 보면 알겠지만, 문자들에 대해 완전탐색을 하나하나 진행하면 절대 안될것이다...안해봤지만 그럴것같음.

 2. A로 시작하면 A, AA ..... E로 시작하면 E, EA ....... 이렇게 진행되는데, 이를 통해 수식을 통해 구할 수 있다고 유추 가능하다.

 3. A는 1이고, I는 1563인데 이를 통해 E는 782이고 각각 시작하는 문자를 기준으로 781의 간격이 떨어져 있다.

 4. A,E,I,O,U 5글자이다. 4글자 단어이면 뒤에 표현 가능한 숫자가 5개가 있을 것이고, 자신의 숫자를 생각해야 한다.

 5. E면 1+781이다. 한 글자 뒤로 갈 때마다 경우의 수는 5배수가 떨어질 것이다.

코드

class Solution {
    public int solution(String word) {
        int answer = 0;
        int mul = 781;
        
        char chr[] = {'A', 'E', 'I', 'O', 'U'};
        
        for(int i=0; i<word.length(); i++){
            for(int j=0; j<5; j++){
                if(chr[j] == word.charAt(i)){
                    answer += 1 + j * mul;
                }
            }
            mul = (mul-1)/5;
        }
        
        return answer;
    }
}

ㄷㅂㄹㄷㅂㄹ