티스토리 뷰

1. 문제 링크

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

 

2670번: 연속부분최대곱

N개의 양의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력하는 프로그램을 작성하시오. 예를 들어 아래와 같이 8개의 양의 실수가 주어진다면, 색칠된

www.acmicpc.net

2. 문제 개요

N개의 양의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아 그 곱을 출력하는 프로그램을 작성하시오.

 

 

3. 문제 힌트

우선 모두 자기 자신만 곱한 걸 나타내기 위해 초기화는 자기 자신들로 해주자.

 

곱해 나갈 때, 곱한 결과가 자기 자신보다 크다면 누적하는 그런 형태로 나타내 주자. 

음수가 없기 때문에 문제는 없다. 코드를 보는 편이 이해가 더 잘 될 것 같다.

 

4. 코드

#include <cstdio>
#include <algorithm>
using namespace std;
int n;
double arr[10001];
double ans = 0;
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; ++i)
scanf("%lf", &arr[i]);
ans = arr[1];
for (int i = 2; i <= n; ++i) {
if (arr[i] * arr[i - 1] >= arr[i]) {
arr[i] = arr[i - 1] * arr[i];
}
ans = max(ans, arr[i]);
}
printf("%.3lf", ans);
return 0;
}

 

5. 결과

댓글
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Total
Today
Yesterday