BOGGLE 문제 시간초과가 왜 뜰까요?

  • bum4985
    bum4985
    #include<stdio.h>
    #include<string.h>
    char arr[7][7];
    int valid[7][7];
    int valid2[7][7];
    char n[20];
    int success;
    
    int main(void)
    {
        int count;
        scanf("%d",&count);
    
        while(count--)
        {
            getchar();
    
    
    
            for(int i=1; i<6; i++)
            {
    
                for(int j=1; j<6;j++)
                {
    
                    arr[i][j]=getchar();
                }
                getchar();
            }
    
            int count2;
            scanf("%d",&count2);
            while(count2--)
            {
    
    
    
                getchar();
                gets(n);
    
    
                int length=strlen(n);
    
    
                for(int i=0;i<8;i++)
                    for(int j=0;j<8;j++)
                        valid[i][j]=1;
    
    
    
                for(int sun=0;sun<length;sun++)
                {
                    success=0;
                    if(sun%2==0){
                        for(int i=1; i<=5; i++)
                            for(int j=1; j<=5; j++)
                                valid2[i][j] = 0;
                        for(int i=1;i<6;i++)
                        {
                            for(int j=1;j<6;j++)
                            {
                                if(valid[i][j]==1 && n[sun]==arr[i][j])
                                {
    
                                            int a=i; int b=j;
                                            valid2[a-1][b-1]=valid2[a-1][b]=valid2[a-1][b+1]=
                                            valid2[a][b-1]=                 valid2[a][b+1]=
                                            valid2[a+1][b-1]=valid2[a+1][b]=valid2[a+1][b+1]=1;
    
    
    
    
    
                                success++;
                                }
    
    
    
                            }
                        }
                    }
                    else{
                        for(int i=1; i<=5; i++)
                            for(int j=1; j<=5; j++)
                                valid[i][j] = 0;
                        for(int i=1;i<6;i++)
                        {
                            for(int j=1;j<6;j++){
                                if(valid2[i][j]==1 && n[sun]==arr[i][j])
                                {
                                            int a=i; int b=j;
                                            valid[a-1][b-1]=valid[a-1][b]=valid[a-1][b+1]=valid[a][b-1]=valid[a][b+1]=valid[a+1][b-1]=valid[a+1][b]=valid[a+1][b+1]=1;
    
    
    
    
    
                                success++;
                                }
    
    
                            }
                        }
    
    
    
                    }
                    if(success==0)break;
                }
                if(success>0 ) printf("YES\n");
                    else printf("NO\n");
            }
        }
    }
    

    친구랑 소스가 아예 똑같은데 친구는 정답이고 저는 시간초과입니다. 왜그럴까요??


    10년 전
1개의 댓글이 있습니다.
  • Being
    Being

    어떻게 똑같은가요? 동일한 코드를 냈는데 결과가 다르게 나왔다는 말씀이신가요? 알려주시면 답변에 도움이 될 것 같습니다.


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