-
algospot - piAlgorithm/알고스팟 2020. 2. 2. 20:11123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117//algospot - pi#include <iostream>#include <vector>using namespace std;#define INF 100000string s;int len;vector<int> cache;int dp(int idx);void init(){cin >> s;len = s.size();cache = vector<int>(len, -1);}int case1(int start, int end){bool flag = true;for (int i = start; i < end; ++i)if (s[i] != s[i + 1])flag = false;if (flag)return 1 + dp(end + 1);elsereturn INF;}int case2(int start, int end){int count = 0;for (int i = start; i < end; ++i)if (s[i] - s[i + 1] == 1)++count;if (count == end - start)return 2 + dp(end + 1);count = 0;for (int i = start; i < end; ++i)if (s[i] - s[i + 1] == -1)++count;if (count == end - start)return 2 + dp(end + 1);return INF;}int case3(int start, int end){if (end - start == 2)if (s[end] == s[start])return 4 + dp(end + 1);elsereturn INF;if (end - start == 3)if (s[start] == s[end - 1] && s[start + 1] == s[end])return 4 + dp(end + 1);elsereturn INF;if (s[start] == s[end] && s[start] == s[start + 2] && s[start + 1] == s[end - 1])return 4 + dp(end + 1);return INF;}int case4(int start, int end){int gap = s[start + 1] - s[start];int count = 0;for (int i = start + 1; i < end; ++i)if (s[i + 1] - s[i] == gap)++count;if (count == end - start - 1)return 5 + dp(end + 1);return INF;}int case5(int start, int end){return dp(end + 1) + 10;}int dp(int idx){if (idx == len)return 0;int &ret = cache[idx];if (ret != -1)return ret;ret = INF;for (int i = 2; i <= 4; ++i){if (idx + i >= len)continue;ret = min(ret, case1(idx, idx + i));ret = min(ret, case2(idx, idx + i));ret = min(ret, case3(idx, idx + i));ret = min(ret, case4(idx, idx + i));ret = min(ret, case5(idx, idx + i));}return ret;}int main(){int C;cin >> C;for (int tn = 0; tn < C; ++tn){init();cout << dp(0) << "\n";}}
cs https://algospot.com/judge/problem/read/PI
algospot.com :: PI
원주율 외우기 문제 정보 문제 (주의: 이 문제는 TopCoder 의 번역 문제입니다.) 가끔 TV 에 보면 원주율을 몇만 자리까지 줄줄 외우는 신동들이 등장하곤 합니다. 이들이 이 수를 외우기 위해 사용하는 방법 중 하나로, 숫자를 몇 자리 이상 끊어 외우는 것이 있습니다. 이들은 숫자를 세 자리에서 다섯 자리까지로 끊어서 외우는데, 가능하면 55555 나 123 같이 외우기 쉬운 조각들이 많이 등장하는 방법을 택하곤 합니다. 이 때, 각 조각들의 난이
algospot.com
PIDP문제
cache[i] : i번째부터 시작하는 원주율의 최소난이도를 저장합니다.

'Algorithm > 알고스팟' 카테고리의 다른 글
algospot - tiling2 (0) 2020.02.03 algospot - quantize (0) 2020.02.03 algospot - jlis (0) 2020.02.02 algospot - lis (0) 2020.02.02 algospot - trianglepath (0) 2020.02.02