알고리즘문제해결전략)록 페스티벌 (Festival) 질문입니다!

  • beable
    beable
    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int C, N, L, cost[1001], day, sum = 0; 
        double ave, min_ave = 101;
        // C,N,L은 문제와 같은 값에, cost는 각 날의 공연장 대여 비용, day는 평균 비용 계산을 위한 분모값, sum은 분자값, ave는 분수 계산 값과 min_ave는 정답으로 제출할 값입니다.
    
        memset(cost, 0, sizeof(cost));
        scanf("%d", &C);
        for (int i = 0; i < C; ++i)
        {
            scanf("%d %d", &N, &L);
            day = L;
            for (int j = 0; j < N; ++j)
                scanf("%d", &cost[j]);
            while (day <= N)
            {
                for (int j = 0; j < day; ++j)
                    sum += cost[j];
                ave = (double)sum / (double)day;
                min_ave = (ave < min_ave) ? ave : min_ave;
                //해당하는 날들의 첫 합은 cost 배열의 값들을 더해 구합니다.
    
                for (int j = day; j < N; ++j)
                {
                    sum += cost[j];
                    sum -= cost[j - day];
                    //그 다음부턴 다음 인덱스값을 더하고, 이전 값을 빼는 식으로 구했습니다.
                    ave = (double)sum / (double)day;
                    min_ave = (ave < min_ave) ? ave : min_ave;
                }
                sum = 0;
                ++day;
            }
            printf("%.12f\n", min_ave);
        }
    }
    

    책을 사서 처음 공부해보고자 하는데, 첫 문제부터 막혔습니다.
    어떤 부분이 문제일 것인지 고수 분들의 고견을 여쭤보고자 합니다.
    조언 부탁드리겠습니다!


    7년 전
3개의 댓글이 있습니다.
  • cosics
    cosics

    고수는 아니지만.. 공연장을 L일 동안 예약할 때 반드시 연속일로 고려해야 하지 않을까요? 문제에 "...이 중 L일 이상을 연속해서 대여하되..." 라는 조건이 있습니다. 물론 이 부분을 고려하지 않으신 것 같지는 않습니다만..

    대여일 L이 반드시 연속적이어야 한다는 조건이 이 문제를 너무나도 간단하게 풀 수 있게 도와주는 셈이지요.
    또한 L ≤ N 라는 조건도 있으니 이를 이중 반복문으로 처리하면 더 간단히 풀리지 않을까 하는 의견입니다.

    부족하지만 도움이 되셨기를..


    7년 전 link
  • beable
    beable

    확인해보겠습니다! 감사합니다!!


    7년 전 link
  • cosics
    cosics

    아닙니다^^ 고수가 아니라 저두 아직 배우는 입장이고 단지 먼저 문제를 풀었다는 것 밖엔^^
    아무튼 제가 드리고 싶은 말씀은 이 문제에 대해서는 너무 어렵게 생각마시고.. 아주 간단하게 생각하시면 충분히 푸실 수 있으실 겁니다.


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