DFS로 푸는 방법도 있긴 하지만 수학적으로 접근하는 것이 쉽고 코드도 더 빨리 돌아갈 것 같아 수학공식으로 풀었다.
각 자리 수마다 알파벳이 한 칸 바뀔 때의 숫자가 정해져 있고 다음과 같다.
첫 번째 알파벳 : 781
두 번째 알파벳 : 156
세 번째 알파벳 : 31
네 번째 알파벳 : 6
다섯 번째 알파벳 : 1
모든 자리가 A인 1부터 시작하므로 공식은 다음과 같다.
단어가 다섯 글자 일때
답 = 1+(781Xa)+1+(156Xb)+1+(31Xc)+1+(6Xd)+1+(1Xe)
공식 = (자리 수)+자리마다 구하기((자리 수에 따라 정해진 수)X(A부터 몇 칸 떨어진 알파벳인지))
🎉완성코드
#include <string>
#include <map>
#include <vector>
using namespace std;
int solution(string word) {
map<char, int> match;
match['A'] = 0;
match['E'] = 1;
match['I'] = 2;
match['O'] = 3;
match['U'] = 4;
vector<int> key_number = { 781, 156, 31, 6, 1 };
int answer = 0;
for (size_t i = 0; i < word.size(); i++)
{
answer += key_number[i] * match[word[i]] + 1;
}
return answer;
}
for문의 조건문 안에 변수를 두개 이상 정의할 수 있다는 것을 알게 되었다.
짧긴 하지만 이해하기에는 내가 쓴 코드가 더 알아보기 쉬울 것 같다.
#include <string>
using namespace std;
int solution(string word) {
string v = string("AEIOU");
int a = word.size();
for(int i = 0, b = 1; i < word.size(); i++, b *= 5)
a += v.rfind(word[i]) * 781 / b;
return a;
}