해당 자릿 수 별 경우의 수는 다음과 같다.
"(총자릿수 - 현자릿수) * 5 + 이전 경우의 수 = 현재 자릿 수의 경우의 수" 이다.
5는 예외적으로 AAAAE - AAAAI 바로 바뀌므로 서로의 변환 관계는 1이다.
A는 가장 첫 번째로 나온다. 따라서 0을 더해주면 된다.
E는 그 다음이므로 1 따라서 알파벳 순서대로 2,3,4 이렇게 순차적으로 바뀐다.
EAIOU가 word면
E가 첫번째에 나오면 781번 1번 돌았다는 것이고,
A가 0번 돌았다는 뜻이다.
I는 3번째 자리이니, 31번을 2번 돌았다는 의미다.
O는 4번째 자리이니, 6번을 4번 돌았다는 의미이다.
U는 5번째 자라이니, 1번을 5번 돌았다는 의미이다.
해당 경우의 수를 다 더해주면 872번째 단어가 된다.
#include <string>
#include <vector>
#include <map>
using namespace std;
int solution(string word) {
int answer = 0;
string voca = "AEIOU";
map <char, int> m;
for (int i = 0; i < voca.size(); i++) {
m[voca[i]] = i;
}
int nextWord[5] = { 781, 156, 31, 6, 1 };
for (int i = 0; i < word.size(); i++) {
answer += 1 + m[word[i]] * nextWord[i];
}
return answer;
}
'콘솔창 & 윈도우창 > 코딩 테스트' 카테고리의 다른 글
백준 골드2 1167 트리의 지름 구하기 (3) | 2024.12.06 |
---|---|
프로그래머스 LV.1 모의고사 (0) | 2024.11.23 |
프로그래머스 LV.2 가장 큰 수 (0) | 2024.11.19 |
[PCCP 기출문제] LV.1 붕대감기 (0) | 2024.11.17 |
프로그래머스 LV.2 오픈채팅방 (카카오 코테) (0) | 2024.11.15 |