PS

백준 2670. 연속부분최대곱

tose33 2021. 7. 13. 17:13

https://www.acmicpc.net/problem/2670

 

2670번: 연속부분최대곱

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

www.acmicpc.net

 

실버4로 책정된 문제치고 너무 쉽다 싶었는데 dp로 풀수 있어서 그런것같다.

나는 브루트포스 알고리즘으로 풀었다.

 

인덱스 i부터 i+1, i+2 .. i+n-1 까지 곱하면서 최댓값을 계속 갱신하고 i값을 1씩 증가시키면 된다.

 

#include <iostream>
#include <algorithm>
using namespace std;

int n;
double ans = 0;
double nums[10001];

// 최댓값 갱신
void Calculate(double num)
{
    ans = max(ans, num);
}

int main()
{
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        cin >> nums[i];
    }

    for(int i = 0; i < n; i++)
    {
        double num = nums[i];
        Calculate(num);
        for(int j = i+1; j < n; j++)
        {
            num *= nums[j];
            Calculate(num);
        }
    }

    printf("%.3f", ans);
}