WORDLENGTH문제 잘 안풀리네요. 질문드립니다.

  • sw.park
    sw.park

    안녕하세요. 며칠을 고민하고 있는데 문제가 해결되지 않아 질문드립니다.
    WORDLENGTH 문제를 풀고 있습니다.
    fgets()로 전체 문자열을 입력받았으며,
    알파벳을 제외한 문자가 발생할 수 있는 경우에 case문을 통해서 처리하고 있습니다.

    ---
    --
    ---
    
    a--a
    aaaa
    
    a-
    -
    
    b
    

    와 같이 제가 생각하기에 corner case가 될법한 것들을 테스트해봐도 제대로 답이 나오는데
    계속 오답처리가 되어 답답한 마음에 힌트를 얻고자 질문드립니다.
    감사합니다.

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #include<stdbool.h>
    #define DEBUG 0
    
    int length[4000];
    int idx_length;
    char input[50][80];
    
    
    int main(){
        int c,n;
        int i,j;
        int pre_length;
        float sum;
        int string_length;
        int return_idx;
        scanf("%d", &c);
        while(c--){
            scanf("%d\n", &n);
            memset(length,0,sizeof(length));
            memset(input,0,sizeof(char)*50*80);
            idx_length=0;
            string_length=0;
            return_idx=0;
            sum=0;
            for(i=0;i<n;i++){
                fgets(input[i], sizeof(input[i]), stdin);
            }   
            for(i=0;i<n;i++){
                for(j=0;j<sizeof(input[i]);j++){
                    switch(input[i][j]){
                        case '-':
                            if(input[i][j+1]!=10 && string_length>0){ //문자 중간에 '-'가 들어갈경우
                                length[idx_length++]=string_length;
                                string_length=0;
                            }
                            break;
                        case ' ':
                            if(string_length>0){                        //문자 중간에 공백이 들어갈 경우
                                length[idx_length++]=string_length;
                                string_length=0;
                            }
                            break;
                        case 10:
                            if(j>1 && input[i][j-1]=='-' && input[i+1][0] >='a' && input[i+1][0]<='z'){
                                break;
                            }
                            else if(string_length>0){
                                length[idx_length++]=string_length;
                                string_length=0;
                            }
                            break;
                        default:
                            if(input[i][j]>='a' && input[i][j]<='z')
                                string_length++;
                            break;
                    }
    #if DEBUG
            if(input[i][j]!=0)
                printf("idx %d value %c %d string lenth %d idx_length %d\n",i,input[i][j], input[i][j], string_length, idx_length);
    #endif              
                }
            }
    
    
            for(i=0;i<idx_length;i++){
                sum+=length[i];
            }
    #if DEBUG
            printf("sum %f idx_length %d \n",sum, idx_length);
    #endif              
            if(idx_length==0)
                idx_length=1;
            printf("%.4f\n", sum/idx_length);
        }
        return 0;
    }
    

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