콘솔창 & 윈도우창/코딩 테스트

프로그래머스 LV.2 모음사전

뽀또치즈맛 2024. 12. 14. 23:11

 
 
해당 자릿 수 별 경우의 수는 다음과 같다.
"(총자릿수 - 현자릿수) * 5 + 이전 경우의 수 = 현재 자릿 수의 경우의 수" 이다.
5는 예외적으로 AAAAE - AAAAI 바로 바뀌므로 서로의 변환 관계는 1이다.
 
 
A는 가장 첫 번째로 나온다. 따라서 0을 더해주면 된다.
E는 그 다음이므로 1 따라서 알파벳 순서대로 2,3,4 이렇게 순차적으로 바뀐다.
 
EAIOU가 word면
E가 첫번째에 나오면 781번 1번 돌았다는 것이고, 
A가 0번 돌았다는 뜻이다.
I는 3번째 자리이니, 31번을 2번 돌았다는 의미다.
O는 4번째 자리이니, 6번을 4번 돌았다는 의미이다.
U는 5번째 자라이니, 1번을 5번 돌았다는 의미이다.
 
해당 경우의 수를 다 더해주면 872번째 단어가 된다.
 
 

#include <string>
#include <vector>
#include <map>

using namespace std;


int solution(string word) {
    int answer = 0;

    string voca = "AEIOU";
    map <char, int> m;

    for (int i = 0; i < voca.size(); i++) {
        m[voca[i]] = i;
    }

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

    for (int i = 0; i < word.size(); i++) {
        answer += 1 + m[word[i]] * nextWord[i];
    }


    return answer;
}