위클리 챌린지 : 5주차 모음 사전
https://programmers.co.kr/learn/courses/30/lessons/84512?language=cpp
코딩테스트 연습 - 5주차
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니
programmers.co.kr
코드
//프로그래머스 위클리 챌린지 모음 사전
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int solution(string word) {
int answer = 0;
answer += word.size();
for (int i = 0; i < word.size(); i++) {
int sum = 0;
int five = 1;
int n = 0;
if (word[i] == 'E') n = 1;
else if (word[i] == 'I') n = 2;
else if (word[i] == 'O') n = 3;
else if (word[i] == 'U') n = 4;
for (int j = 0; j < 5 - i; j++) {
sum += five;
five *= 5;
}
answer += (sum * n);
}
return answer;
}
int main() {
string word = "AAE";
cout << solution(word) << "\n";
return 0;
}
설명
AAAAA 5
AAAAE 5+1x1 = 6
AAAE 4+(1+5)x1 = 10
AAE 3+(1+5+25)x1 = 34
AE 2+(1+5+25+125)x1 = 158
I 1+(1+5+25+125+625)x2 = 1563
다음과 같은 규칙을 가진다.
word의 사이즈만큼 더해주고 word자리에서 알파벳자리수를 곱한 만큼 더해준다.
(첫 번째 자리 : (1+5+25+125+625), 두 번째 자리 : (1+5+25+125),...)
예를 들어 AAE는 3+(1+5+25) x1 = 34이다.
AAE 전에 올 수 있는 단어는 한자리 "A"(1), 두 자리 "AA"(1), 세 자리 "AAA" (1), 네 자리 "AAAA" ~ "AAAU"(5개), 다섯 자리 "AAAAA" ~ "AAAAU"(5x5개)이다.
AAE전까지 세 자리(1) + 네 자리(5) + 다섯 자리(25)처럼 구할 수 있다. (알파벳 모음이 5개이므로, 확률)
따라서 1+2+(1+5+25) x1이란 식을 얻을 수 있다.
AAI라면 AAA~, AAB~ 의 개수가 중복되므로 x2를 해줄 수 있다.
다음과 같이 값을 구할 수 있다.
고찰
걸린 시간: 한 시간
규칙을 찾기 위해서 노력했다. 처음 문제를 읽었을 때 감이 잡히지 않아서 하나씩 A부터 AAAE, AAE까지 값을 구해보았다. 하나씩 쓰면서 구하다 보니 규칙을 찾을 수 있었다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
알고리즘(C++) / 프로그래머스 level 2 : 전화번호 목록 (0) | 2021.09.05 |
---|---|
알고리즘(C++) / 프로그래머스 level 2 : 더 맵게 (0) | 2021.09.05 |
알고리즘(C++) / 프로그래머스 위클리 챌린지 : 4주차 직업군 추천하기 (0) | 2021.08.31 |
알고리즘(C++) / 프로그래머스 level 2 : 카카오 프렌즈 컬러링북 (0) | 2021.08.31 |
알고리즘(C++) / 프로그래머스 level 2 : 수식 최대화 (0) | 2021.08.29 |
댓글