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
반응형
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 뒤에 있는 큰 수 찾기 (1) | 2024.08.16 |
---|---|
[프로그래머스] 롤케이크 자르기 (0) | 2024.08.15 |
[프로그래머스] [3차] 압축 (0) | 2024.08.14 |
[프로그래머스] 게임 맵 최단거리 (0) | 2024.08.14 |
[프로그래머스] k진수에서 소수 개수 구하기 (0) | 2024.08.12 |