티스토리 뷰
1. 문제 링크
https://www.acmicpc.net/problem/2670
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. 결과
'알고리즘 > Dynamic Programming' 카테고리의 다른 글
boj, 백준) 1086. 박성원 ( C / C++) (0) | 2021.03.23 |
---|---|
boj, 백준) 9177. 단어 섞기 (C / C++) (0) | 2020.12.31 |
boj, 백준) 1949. 우수 마을 ( C / C++) (0) | 2020.06.05 |
boj, 백준) 2306. 유전자 ( C / C++) (0) | 2020.06.05 |
백준, boj) 1006. 습격자 초라기 ( C / C++) (0) | 2020.06.01 |
댓글