maxSum 오답때문에 질문드립니다.

  • jss
    jss

    제가 생각한 테스트 케이스는 다 답이 맞는데 왜 계속 오답인지 모르겠습니다..ㅠ 도와주십시오..

    구현은 입력받은 배열에서 인접하는 양수들끼리 음수들끼리 모두 취합한다음에
    최대값을 비교해서 구했습니다..

    #include <stdio.h>
    #include <stdlib.h>
    
    int preSort(int* ar,int len);
    
    int main(void){
        int *arr;
        int maxSum,i;
        int len=0;
        int cnt=0;
        int sum=0;
        int cur=0;
        int con=0;
    
        scanf("%d",&cnt);
        while(cnt>0){
    
            scanf("%d",&len);
            arr=(int*)malloc(sizeof(int)*len);
    
            for(i=0;i<len;i++){
                scanf("%d",&arr[i]);
            }
            maxSum=0;
            sum=0;
            con=0;
            len=preSort(arr,len);           
    
            for(i=0;i<len;i++){
                if(i==0 && arr[i]<0)
                    continue;
                if(arr[i]>=maxSum)
                    maxSum=arr[i];
    
                sum+=arr[i];
                con++;
    
                if(con%3==0 && sum < maxSum){
                    if(sum<arr[i])
                    sum=arr[i];
                    else
                    con=0;
                }
                if(sum >= maxSum)
                    maxSum=sum;
    
            }
    
    //      for(i=0;i<len;i++){
    //          printf("%d ",arr[i]);
    //      }
    //      printf("\n");
    
            printf("%d\n",maxSum);
            free(arr);
            cnt--;
        }
        return 0;
    }
    
    int preSort(int* ar,int len){
        int temp=0,i=0;
        int cur=0;
        temp = ar[0];
            for(i = 1 ; i < len ; i ++ ){
                if(ar[i] <= 0 && temp <= 0 ){
                    temp+=ar[i];
                }else if(ar[i] >= 0 && temp >= 0 ){
                    temp+=ar[i];    
                }else{
                    ar[cur++]=temp;
                    temp=ar[i];
                }
            }
            ar[cur++]=temp;
        return cur;
    }
    

    9년 전
2개의 댓글이 있습니다.
  • hyunhwan
    hyunhwan
    1. 우선 답을 출력할 때 개행문자 처리가 되질 않았습니다.
    2. 코드를 자세히 보진 않았지만, 제가 넣어본 무작위 테스트 케이스에 대해서는 정답이 아닌 답을 출력하는 것을 확인하였습니다. 참고로 다음의 예시에서는 6이 나와야 하는데, 4가 나오는 것으로 보입니다.

    1
    10
    2 -1 2 -1 2 -1 2 -1 2 -1


    9년 전 link
  • jss
    jss

    LiBe님 테스트해주셔서 감사합니다. 위 문제를 수정하고 시도 했는데도 오답이 나오네요..ㅠ 테스트 케이스가 필요합니다.. 흑 ㅠ


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