가장 흔한 접두어 질문좀 드릴게요!

  • hiwaryi
    hiwaryi

    http://algospot.com/forum/read/1087/

    이글에 댓글 다신 이태윤 님의 힌트를 참고해서 짜봤는데요
    계속 WA가 뜹니다.
    도저히 무엇이 문제인지 모르겠네요..

    우선 input 에 입력을 한번에 다 받고,
    i 를 0~m , j 를 0~n 까지 돌리면서 테이블을 작성했습니다.

    아래는 제 코드입니다

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int c,n,m,len;
        int i,j,k;
        char input[3010][210];
        int table[3010][210];
        scanf("%d",&c);
    
        while(c--)
        {
            scanf("%d %d",&n,&m);
    
            for(int i=0;i<n;i++)
                scanf("%s",&input[i]);
    
            for(i=0;i<3010;i++)
            {
                for(j=0;j<210;j++) table[i][j]=0;
            }
    
            for(i=0;i<m;i++)
            {
                for(j=0;j<n;j++)
                {
                    if('a'<=input[j][i] && input[j][i]<='z')
                    {
                        if(table[j][i]==1) continue;
    
                        if(j==0)
                        {
                            len=strlen(input[0]);
                            for(k=0;k<len;k++) table[0][k]=1;
                        }
                        else
                        {   
                            if(input[j][i]==input[j-1][i]) table[j][i]=table[j-1][i]+1;
                            else
                            {
                                len=strlen(input[j]);
                                for(k=i;k<len;k++) table[j][k]=1;
                            }
                        }
                    }
                }
            }
    
            for(i=0;i<m;i++)
            {
                int max=-1,print;
                for(j=0;j<n;j++)
                {
                    if(!table[j][i]) continue;
                    else
                    {                    
                        if(table[j][i]>max || max==-1)
                        {
                            max=table[j][i];
                            print=j;
                        }
                    }
                }
    
                for(j=0;j<=i;j++)
                    printf("%c",input[print][j]);
                printf("\n");
            }
        }
    }
    

    12년 전
3개의 댓글이 있습니다.
  • Being
    Being

    문자열의 참조에 있어서, 항상 바운드를 넘어가지 않았는지 주의하셔야 합니다. 이 경우는 j번 스트링의 i번째 문자가 알파벳인지 검사하는 부분에 있어서 배열을 재사용하고 있으므로 사실은 쓰레기 값이지만 알파벳인 것으로 간주되어 테이블을 계산하게 됩니다.


    12년 전 link
  • Being
    Being

    전체적으로 모든 문자열 참조에 있어 길이를 벗어나지 않았는지 점검하셔야 답이 나올 것 같습니다 :)


    12년 전 link
  • hiwaryi
    hiwaryi

    이럴수가! 그거 하나 고치니까 바로 정답뜨네요
    앞으로 주의해야겠어요.
    감사합니다 :)


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