문제 : https://www.acmicpc.net/problem/12042
[알고리즘풀이]
i번째에 올 수 있는 알파벳은 ( i - 1 ), i , ( i + 1 ) 번 째에 있는 알파벳 중 하나다.
즉, ( i - 1), i , ( i + 1) 에 서로 다른 알파벳이 몇 개 있느냐에 따라 경우의 수가 달라진다.
각 자리별로 올 수 있는 알파벳의 경우의 수를 구하고, 모두 곱하면 답이 된다.
#include<iostream>
#include<string>
#include<vector>
#define m 1000000007
using namespace std;
int main(void) {
int t, n = 1;
cin >> t;
while (t--) {
string in;
cin >> in;
vector<int> v;
for (int i = 0; i < in.length(); i++) {
int c = 0;
if (i == 0) {
if (in.length() != 1 && in[i] != in[i + 1])
c += 2;
else
c++;
}
else if (i == in.length() - 1) {
if (in[i] != in[i - 1])
c += 2;
else
c++;
}
else {
bool alphabet[26] = {};
alphabet[in[i-1] - 'a'] = true;
alphabet[in[i] - 'a'] = true;
alphabet[in[i + 1] - 'a'] = true;
for (int i = 0; i < 26; i++)
if (alphabet[i])
c++;
}
v.push_back(c);
}
long long ans = 1;
for (int i = 0; i < v.size(); i++) {
ans *= v[i];
ans = ans % m;
}
cout << "Case #" << n++ << ": " << ans << '\n';
}
}
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] 1600 - 말이 되고픈 원숭이 (0) | 2019.10.25 |
---|---|
[BOJ] 14331 - Lazy Spelling Bee (Large) (0) | 2019.10.15 |
[BOJ] 4949 - The Balance of the World 코드 개선 (0) | 2019.10.04 |
[BOJ] 11650 - 좌표 정렬하기 ( sort 이용 ) (0) | 2019.10.04 |
[BOJ] 2161 - 카드1 (0) | 2019.10.04 |