본문으로 바로가기
문제

www.acmicpc.net/problem/2670

 

2670번: 연속부분최대곱

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

www.acmicpc.net

소스코드
#include <bits/stdc++.h>
using namespace std;
double dp[10001];
double arr[10001];
 
int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	int n;
	double ans = 0.0;
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> arr[i];
	dp[1] = arr[1];
	for (int i = 2; i <= n; i++) {
		dp[i] = max(arr[i], dp[i - 1] * arr[i]);
		ans = max(dp[i], ans);
	}
	printf("%.3lf", ans);
}
풀이

계속해서 연속된 값과 현재의 값과 비교하여 만약 연속된 곱의 값이 현재 위치의 배열보다 작으면 새로 시작점을 지정하여 문제를 해결한다.

또한 4째자리에서 반올림하닌깐 printf로 해결하였다.