문제
링크
풀이
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
inline bool check(char a, char b) {
return (a == 'B' && b == 'O') || (a == 'O' && b == 'J') || (a == 'J' && b == 'B');
}
void solve(void) {
int n; cin >> n;
string s; cin >> s;
vector<int> dp(n, 1e9); dp[0] = 0;
for (int i=0; i<n-1; i++) for (int j=i+1; j<n; j++) {
if (check(s[i], s[j])) dp[j] = min(dp[j], dp[i] + (j-i)*(j-i));
}
cout << (dp[n-1] == 1e9 ? -1 : dp[n-1]);
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
return 0;
}