https://school.programmers.co.kr/learn/courses/30/lessons/84512
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
모음 알파벳 'A', 'E', 'I', 'O', 'U'만으로 구성된 길이 5 이하의 모든 단어가 수록된 사전을 기준으로, 주어진 단어가 사전에서 몇 번째 순서인지 반환해야 합니다.
- 사전의 첫 번째 단어는 "A", 두 번째는 "AA", 마지막은 "UUUUU"입니다.
- 입력으로 주어진 단어의 길이는 1 이상 5 이하이며, 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
- 주어진 단어가 사전에서 몇 번째인지 반환하는 solution 함수를 작성해야 합니다.
풀이 방법
알파벳은 모음 'A', 'E', 'I', 'O', 'U'로 구성되며, A, AA, AAA -> UUUUU 순으로 단어가 정렬됩니다.
이때 각 알파벳에 대한 순서가 존재하므로, 각 문자 위치에 대한 가중치를 부여하면 쉽게 풀 수 있습니다.
예를 들어, A(2)(3)(4)(5)의 문자가 있을 때:
- (2)에 올 수 있는 문자는 'A', 'E', 'I', 'O', 'U'로 5개,
- (3)에 올 수 있는 문자는 'A', 'E', 'I', 'O', 'U' 각각에 대해 다시 5개씩 올 수 있으므로 5×5=255
- (4)는 5×5×5=125
- (5)는 5×5×5×5=625가 됩니다.
그럼 각 자릿수에 대한 위치를 가중치로 표현하면:
- 첫 번째 자리: 1+5+(5×5)+(5×5×5)+(5×5×5×5)
- 두 번째 자리: 1+5+(5×5)+(5×5×5)
- 세 번째 자리: 1+5+(5×5)
- 네 번째 자리: 1+5
- 다섯 번째 자리: 1
문자열은 'A', 'E', 'I', 'O', 'U'로 위치가 고정되므로, 입력받은 word의 각 자리 문자에 따라 해당 자리의 가중치에 몇 번째 문자인지를 곱한 값을 더하고, 마지막으로 +을 해주면 해당 단어가 사전에서 몇 번째 위치인지 계산할 수 있습니다.
- 여기서 + 을 해주는 이유는, 사전의 인덱스는 1부터 시작하기 때문입니다.
풀이 코드
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int weight[5];
vector<char> words = {'A','E','I','O','U'};
int solution(string word) {
int answer = 0;
weight[0] = 1+(5)+(5*5)+(5*5*5)+(5*5*5*5);
weight[1] = 1+(5)+(5*5)+(5*5*5);
weight[2] = 1+(5)+(5*5);
weight[3] = 1+(5);
weight[4] = 1;
for(int i=0; i<word.size(); i++){
int pos = find(words.begin(), words.end(), word[i]) - words.begin();
answer+=weight[i]*pos+1;
}
return answer;
}
'Algorithm > Programmers' 카테고리의 다른 글
[프로그래머스] Lv.1 문자열 내 마음대로 정렬하기 c++ (0) | 2025.01.24 |
---|---|
[프로그래머스] Lv.3 단어 변환 c++ (0) | 2025.01.23 |
[프로그래머스] Lv.1 가장 많이 받은 선물 c++ (0) | 2025.01.22 |
[프로그래머스] Lv.2 기능개발 c++ (0) | 2025.01.21 |
[프로그래머스] Lv.3 베스트앨범 c++ (0) | 2025.01.21 |