FENCE 런타임오류 중 memory limit exceeded 때문인데 이유를 모르겠네요 ㅜ

  • 박태우
    박태우

    ##소스코드

    #include <iostream>
    using namespace std;
    
    int calculate_area(int *high,int start,int n) //각 지점에서 시작한 직사각형 넓이
    {
        int *end = new int[n-start];
        int area,count=0,most=0;
    
        end[0] = start;
        for(int i=start; i<n; i++) //시작한 지점의 높이보다 작은 위치를 저장
        {
            if(high[end[count]] > high[i])
            {
                end[count+1] = i;
                count++;
            }
            if(i == n-1 && end[count]!=n-1)
            {
                end[count+1] = n;
                count++;
            }
        }
    
        if(count == 0)
        {
            most = high[start]*(n-start);
            return most;
        }
    
        for(int i=0; i+1<=count; i++)
        {
            area = (end[i+1] - end[0])*high[end[i]];
            if(most < area) most = area;
        }
        return most;
    }
    
    int main()
    {
        int cases=0;
        cin >> cases;
        for(int i=0; i<cases; i++)
        {
            int n,area,most=0;
            cin>>n;
    
            int *high = new int[20000]; //높이
            for(int j=0; j<n; j++)
            {
                cin>>high[j];
            }
    
            for(int j=0; j<n; j++)
            {
                area = calculate_area(high,j,n);
                if(most < area) most = area;
            }
            cout<<most<<endl;
        }
    }
    

    c++ 프로그램으로 돌리면 답은 나오는데 답안제출하니 런타임오류가 뜨네요

    메모리 초과때문인거 같은데 왜그러죠 ㅜㅜ

    위의 소스코드는 아니지만 end의 메모리는 시작한 지점의 높이보다 작은 높이의 갯수를

    계산해 동적할당을 해도 런타임오류가 뜨네요;;


    8년 전
1개의 댓글이 있습니다.
  • hyunhwan
    hyunhwan

    매번 메모리를 동적으로 할당하시고 delete를 하지 않고 계속 할당하다 보니 memory leak이 발생하여 문제가 발생하는게 아닌가 추측해봅니다.


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