원주율구하기 문제 계속 오답으로 뜹니다.

  • 송광혁
    송광혁
    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    string now;
    int cache[1000];
    
    int value(int start, int end)
    {
        string tmp = now.substr(start,end);
        if(tmp == string(tmp.size(),tmp[0]))
        {
            return 1;
        }
        for(int i=1;i+1<=tmp.size();i++)
        {
            if(tmp[i] - tmp[i-1] == tmp[i+1] - tmp[i])
            {
                if((tmp[i]-tmp[i-1] == 1 && tmp[i+1]-tmp[i] == 1) || (tmp[i]-tmp[i-1] == -1 && tmp[i+1]-tmp[i] == -1))
                {
                    return 2;
                }
                else
                {
                    return 5;
                }
            }
        }
        int no3=true;
        for(int i = 0; i<tmp.size();i++)
        {
            if(tmp[i] != tmp[i%2])
                no3 = false;
        }
        if(no3 ==true)
        {
            return 4;
        }
        return 10;
    
    }
    int divide(int start)
    {
        if(start == now.size())
            return 0;
        int& ret = cache[start];
        if(ret != -1) return ret;
        ret=99999999;
        for(int there = 3; there < 6; there++)
        {
            if(there+start <= now.size())
            {
                ret = min(ret,divide(there+start) + value(start,there+start));
            }
        }
        return ret;
    }
    int main()
    {
        vector<string> arr;
        int howmuch;
        string s;
        cin >> howmuch;
    
        while(howmuch--)
        {
            cin >> s;
            arr.push_back(s);
        }
        //cout << arr[1] << endl;
        for(int i=0;i<arr.size();i++)
        {
            memset(cache,-1,sizeof(cache));
            now = arr[i];
            int result = divide(0);
            printf("%d\n",result);
            result=0;
        }
    
    }
    

    메모리초과나 시간초과가 아니라 오답이 뜨는 이유를 모르겠습니다.


    6년 전
0개의 댓글이 있습니다.
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.