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

  • User Avatar
    박태우

    ##소스코드
    ~~~ c++
    #include
    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 {
    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의 메모리는 시작한 지점의 높이보다 작은 높이의 갯수를

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


    10년 전
1개의 댓글이 있습니다.
  • User Avatar
    hyunhwan

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


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