본문 바로가기

코딩테스트/프로그래머스

[프로그래머스] 모음사전

728x90
반응형


🔗 문제 링크

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

 

프로그래머스

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

programmers.co.kr


728x90

👩‍💻 코드

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

using namespace std;

int solution(string word) {
    int answer = word.size();
    vector<int> weights = { 781, 156, 31, 6, 1 };
    map<char, int> vowels = {{'A', 0}, {'E', 1}, {'I', 2}, {'O', 3}, {'U', 4}};
    
    for(int i=0; i<word.size(); i++){
        answer += weights[i] * vowels[word[i]];
    }
    
    return answer;
}

📝 풀이

  • 우선 다섯가지 모음으로 이루어진 문자의 경우의 수를 구합니다.
    • 1자리 단어 (5자리 고정) = 1
    • 1자리 단어 (4자리 고정) = 5
    • 2자리 단어 (3자리 고정) = 5 x 5 = 25
    • 3자리 단어 (2자리 고정) = 5 x 5 x 5 = 125
    • 4자리 단어 (1자리 고정) = 5 x 5 x 5 x 5 = 625
  • 각 자리 뒤의 오는 모든 경우의 수를 고려하여 가중치를 계산합니다.
    • 첫 번째 글자의 가중치 : 한 자리 고정(625) + 두 자리 고정(125) + 세 자리 고정(25) + 네 자리 고정(5) + 다섯 자리 고정(1) = 781 입니다.
    • 두 번째 글자의 가중치 : 두 자리 고정(125) + 세 자리 고정(25) + 네 자리 고정(5) + 다섯 자리 고정(1) = 156 입니다.
    • 세 번째 글자의 가중치 : 세 자리 고정(25) + 네 자리 고정(5) + 다섯 자리 고정(1) = 31 입니다.
    • 네 번째 글자의 가중치 : 네 자리 고정(5) + 다섯 자리 고정(1) = 6 입니다.
    • 다섯 번째 글자의 가중치 : 다섯자리 고정(1) = 1 입니다.
  • answer은 문자수만큼 초기화하고 모음과 인덱스(이전에 올 수 있는 문자수)와 짝지어 초기화합니다.
    • 가중치는 각 자리를 기준으로 이전에 존재하는 모든 경우의 수를 나타내는 것이므로 자리마다 +1이 필요합니다.
  • for문을 돌며 가중치와 모음의 인덱스를 계산하여 answer에 더해줍니다.
  • 최종적으로 계산된 answer를 return합니다.

예시 : "EIO"

  • 첫 번째 자리 'E' : 첫 번째 자리가 'A'인 모든 경우의 수를 계산 👉 781 x 1 = 781
  • 두 번째 자리 'I' : 두 번째 자리가 'A', 'E'인 모든 경우의 수를 계산 👉 156 x 2 = 312
  • 세 번째 자리 'O' : 세 번째 자리가 'A', 'E', 'I'인 모든 경우의 수를 계산 👉 31 x 3 = 93
  • 문자의 수 : 'E', 'EI', 'EIO' 경우를 계산 👉 3
  • 최종적으로 781 + 312 + 93 + 3 = 1189

예시 : "I"

  • 첫 번째 자리 'I' : 첫 번째 자리가 'A', 'E'인 모든 경우의 수를 계산 👉 781 x 2 = 1562
  • 문자의 수 : 'I' 경우를 계산 👉 1
  • 최종적으로 1562 + 1 = 1563

 

728x90
반응형