PI 문제 어디서 틀렸는지 아무리생각해도 답이 나오지가 않네요..ㅠㅠ

  • eldkqmfhf123
    eldkqmfhf123

    생각해본 왠만한 데이터는 다 나오는데 어디서 삑사리가 났는지 알수가 없네요.. 혹시 조언좀 구할수 있을까요?

    #include<iostream>
    #include<math.h>
    #include<string.h>
    
    using namespace std;
    
    //ifstream cin("input.txt");
    //ofstream cout("output.txt");
    
    int main()
    {
    
        int T;
        cin >> T;
        for(int t=0;t<T;t++)
        {
            char Data[10010]={0,};
            int Dy[10010]={0,};
            Dy[1]=100000;
            Dy[2]=100000;
            cin >> Data;
    
            int i,j;
            int len = strlen(Data);
    
            for(i=len;i>=1;i--)
                Data[i] = Data[i-1]-'0';
            Data[0]=0;
    
            for(i=3;i<=len;i++)
            {
                Dy[i] = 0x7fffffff;
                for(j=3;j<=5;j++)
                {
                    if(i-j<0)continue;
                    if(Dy[i] > Dy[i-j]+10)
                        Dy[i] = Dy[i-j]+10;
    
                    int a = Data[i] - Data[i-1];
                    int flag=0;
                    for(int k=1;k<j;k++)
                    {
                        if(Data[i]-Data[i-k] != a*k)
                        {
                            flag=1;
                            break;
                        }
                    }
                    if(flag==0)
                    {
                        if(Dy[i] > Dy[i-j]+5)
                            Dy[i] = Dy[i-j]+5;
                    }
                    flag=0;
                    if(j==3)
                    {
                        if(Data[i]==Data[i-2])
                            flag=1;
                    }
                    if(j==4)
                    {
                        if(Data[i]==Data[i-2] && Data[i-1]==Data[i-3])
                            flag=1;
                    }
                    if(j==5)
                    {
                        if(Data[i]==Data[i-2] && Data[i-2] && Data[i-4] && Data[i-1] == Data[i-3])
                            flag=1;
                    }
                    if(flag==1)
                    {
                        if(Dy[i] > Dy[i-j]+4)
                        Dy[i] = Dy[i-j]+4;
                    }
                    flag=0;
                    int flag2=0;
                    for(int k=1;k<j;k++)
                    {
                        if(Data[i-k] != Data[i]-k)
                        {
                            flag=1;
                        }
                        if(Data[i-k] != Data[i]+k)
                        {
                            flag2=1;
                        }
                    }
                    if(flag==0||flag2==0)
                    {
                        if(Dy[i] > Dy[i-j]+2)
                        Dy[i] = Dy[i-j]+2;
                    }
                    flag=0;
                    for(int k=1;k<j;k++)
                    {
                        if(Data[i-k] != Data[i])
                        {
                            flag=1;
                            break;
                        }
                    }
                    if(flag==0)
                    {
                        if(Dy[i] > Dy[i-j]+1)
                        Dy[i] = Dy[i-j]+1;
                    }
                }
            }
            cout << Dy[len] << "\n";
        }
    
        return 0;
    }
    

    11년 전
2개의 댓글이 있습니다.
  • Kureyo
    Kureyo

    일단
    if(Data[i]==Data[i-2] && Data[i-2] && Data[i-4] && Data[i-1] == Data[i-3])
    에서 중간 && 가 == 이어야할거같네요


    11년 전 link
  • eldkqmfhf123
    eldkqmfhf123

    헐...그런실수를.... ㅠㅠ코드를 좀더 꼼꼼히 봤어야했네요.. 감사합니다.


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