[프로그래머스 문제풀이] 24. 모음사전

WIGWAG·2023년 1월 7일
0

프로그래머스

목록 보기
24/32

나의 풀이

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;
}

모음사전 문제 링크

profile
윅왁의 프로그래밍 개발노트

0개의 댓글