본문 바로가기

백준/실버

[백준 2670번] 연속부분 최대곱 (C++)

문제링크 : https://www.acmicpc.net/problem/2670

 

2670번: 연속부분최대곱

첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
#define ll long long

double dp[10000];
double arr[10000];

int main(void) {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    
    int N;
    cin >> N;
    double result = 0.0;

    for(int i=0; i<N; i++)
    {
        cin >> arr[i];
        if(i==0)
        {
            dp[i] = arr[i]; //초기값
        }
        else
        {
            dp[i] = max(arr[i], dp[i-1] * arr[i]);  //최대값 갱신
        }
        result = max(dp[i], result);
    }
    
    printf("%.3lf", result);

    return 0;
}

수를 실수로 처리해야 한다.

평소에는 출력할때 cout을 사용하지만, 소수 셋째자리 출력하는 방법이 번거로워서 printf를 사용해서 출력했다.