프로그래머스 모음사전 자바

2023. 5. 7. 15:42코딩테스트/프로그래머스

https://school.programmers.co.kr/learn/courses/30/lessons/84512

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

이 문제를 풀 때 규칙을 찾는 것이 가장 중요하다고 생각이 듭니다.

 

1 A

2 AA

3 AAA

4 AAAA

5 AAAAA

6 AAAAE

7 AAAAI

8 AAAAO

9 AAAAU

10 AAAE

11 AAAEA

12 AAAEE

13 AAAEI

14 AAAEO

15 AAAEU

16 AAAI

17 AAAIA

18 AAAIE

19 AAAII

20 AAAIO

21 AAAIU

22 AAAO

23 AAAOA

24 AAAOE

25 AAAOI

26 AAAOO

27 AAAOU

28 AAAU

29 AAAUA

30 AAAUE

31 AAAUI

32 AAAUO

33 AAAUU

34 AAE

 

이런 순서로 단어의 순서가 정해지게 된다.

맨 처음 부분에서 알파벳의 글자의 수에 따라 순서가 정해지므로 문자열의 순서를 글자의 수로 초기화합니다.

int answer = word.length();

주어진 문자열의 마지막 1이 증가 할 때 변경되고 마지막에서 두번째에서 변경될 때는 6 세번째는 31 

즉 f(n) = 5  *  f(n - 1) + 1  (f(0) = 0) 이라는 공식이 만들어집니다.

이를 통해 각 자리마다 변경될 때의 수만큼을 배열로 만들어줍니다.

int[] increase = {781, 156, 31, 6, 1};

문자열의 인덱스를 통해 증가하는 횟수를 더해주면 됩니다.

 

for (int i = 0; i < word.length(); i++) {
    int index = aeiou.indexOf(word.charAt(i));
    answer += increase[i] * index;
}

 

따라서 위와 같은 코드가 완성되게 됩니다.

 

public class Solution84512 {

    public int solution(String word) {
        int answer = word.length();
        String aeiou = "AEIOU";

        // f(n) = 5 * f(n - 1) + 1  f(0) = 0
        int[] increase = {781, 156, 31, 6, 1};

        for (int i = 0; i < word.length(); i++) {
            int index = aeiou.indexOf(word.charAt(i));
            answer += increase[i] * index;
        }
        return answer;
    }

    public static void main(String[] args) {

        String word = "AAAAE";

        Solution84512 s = new Solution84512();
        int result = s.solution(word);

        System.out.println(result);

    }
}