문제
N개의 양의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력하는 프로그램을 작성하시오. 예를 들어 아래와 같이 8개의 양의 실수가 주어진다면,
색칠된 부분의 곱이 최대가 되며, 그 값은 1.638이다.
입력
첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어진다.
출력
계산된 최댓값을 소수점 이하 넷째 자리에서 반올림하여 소수점 이하 셋째 자리까지 출력한다.
예제 입력 1
8 1.1 0.7 1.3 0.9 1.4 0.8 0.7 1.4 |
예제 출력 1
1.638 |
더보기
Solution
#include<stdio.h>
#include<stdlib.h>
double maximum_partial_array(double *arr,int size)
{
double mul=1.0, max=arr[0];
for(int i=0;i<size;i++)
{
mul=arr[i]*mul>arr[i]?arr[i]*mul:arr[i];
max=max>mul?max:mul;
}
return max;
}
int main(void)
{
int N;
double *arr=NULL;
scanf("%d", &N);
arr=(double *)malloc(N*sizeof(double));
for(int n=0;n<N;n++)
scanf("%lf", &arr[n]);
printf("%.3lf\n", maximum_partial_array(arr,N));
free(arr);
return 0;
}
728x90
'백준 알고리즘' 카테고리의 다른 글
<백준 알고리즘> 10211번: Maximum Subarray (0) | 2020.12.06 |
---|---|
<백준 알고리즘> 2688번: 줄어들지 않아 (0) | 2020.12.06 |
<백준 알고리즘> 2010번: 플러그 (0) | 2020.12.04 |
<백준 알고리즘> 15780번: 멀티탭 충분하니? (0) | 2020.12.04 |
<백준 알고리즘> 5339번: 콜센터 (0) | 2020.12.04 |