PS/BOJ
백준 2670번: 연속부분최대곱 (C++)
도비(Doby)
2022. 6. 7. 22:49
https://www.acmicpc.net/problem/2670
2670번: 연속부분최대곱
첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나
www.acmicpc.net
Solved By: DP
풀면서 Brute-Force 한 느낌이 들었습니다. 모든 시작점부터 n까지 다 곱해가면서 시작점마다 최댓값을 구하고, 또한 그 최댓값 N개 중에서도 최댓값을 구해야 합니다.
#include <iostream>
#define MAX 10001
using namespace std;
double arr[MAX];
double cache[MAX];
int n;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> arr[i];
}
double result = 0;
// O(N^2) = O(100,000,000)
for(int i = 1; i <= n; i++){
double tmp = 1;
double maxValue = 0;
for(int j = i; j <= n; j++){
tmp *= arr[j];
maxValue = max(maxValue, tmp);
}
cache[i] = maxValue;
result = max(result, maxValue);
}
cout.precision(3);
cout << fixed;
cout << result << '\n';
return 0;
}