[백준/BOJ] 백준 2922번 : 즐거운 단어
2021. 2. 19. 21:44ㆍ알고리즘 문제풀이
밑줄에 모음을 넣는 경우, L을 제외한 자음을 넣는 경우, L을 넣는 경우 이렇게 3가지로 나눠서 문제를 해결했다. 모음을 넣는다고 할 때는 결과값에 모음의 개수 5를 곱하고, L을 제외한 자음을 넣는다고 할 때는 결과값에 20(자음(21개)-L(1개))을 곱하고, L을 넣는다고 할때는 결과값에 1을 곱해서 문제를 해결했다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
string input;
long long Solve(int mo_num, int ja_num, int L_num, int index)
{
if (mo_num >= 3) //모음이 연속해서 3번 이상일때
return 0;
if (ja_num >= 3) //자음이 연속해서 3번 이상일때
return 0;
//글자를 모두 다 만들었을때
if (index == input.size())
{
if (L_num == 0) //L이 포함되지 않았을때
return 0;
else
return 1;
}
long long ret = 0;
if (input[index] != '_') //_이 아닐때
{
if (input[index] == 'A' || input[index] == 'E' || input[index] == 'I' || input[index] == 'O' || input[index] == 'U')
ret = Solve(mo_num + 1, 0, L_num, index + 1);
else
{
if (input[index] == 'L')
ret = Solve(0, ja_num + 1, L_num + 1, index + 1);
else
ret = Solve(0, ja_num + 1, L_num, index + 1);
}
}
else
{
//_에 모음을 넣는 경우
ret += (5 * Solve(mo_num + 1, 0, L_num, index + 1));
//_에 자음을 넣는 경우
ret += (20 * Solve(0, ja_num + 1, L_num, index + 1)); //자음21개-1개(L) = 20
//_에 L을 넣는 경우
ret += (1 * Solve(0, ja_num + 1, L_num + 1, index + 1));
}
return ret;
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> input;
cout << Solve(0, 0, 0, 0);
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 12904번 : A와 B (0) | 2021.02.28 |
---|---|
[백준/BOJ] 백준 12865번 : 평범한 배낭 (0) | 2021.02.28 |
[백준/BOJ] 백준 14391번 : 종이 조각 (0) | 2021.02.19 |
[백준/BOJ] 백준 3830번 : 교수님은 기다리지 않는다 (0) | 2021.02.19 |
[백준/BOJ] 백준 1208번 : 부분수열의 합 2 (0) | 2021.02.19 |