https://www.acmicpc.net/problem/2670
우선 문제부터 간단하게 요약하면, N개의 실수들이 나열 되어 있으면, 곱이 최대가 되는 부분을 찾아 계산해야 하는 문제입니다.
<Solution>
하나씩 곱해나가면서 최댓값을 갱신합니다. 이 때, 만약 결과값이 1보다 작아지면 1로 다시 초기화 해주는 형태로 구현하면 됩니다.
실제 구현은 아래와 같습니다.
#include <iostream>
#include <stdio.h>
#include <math.h>
using namespace std;
int N;
double D[10000+10];
void InputData(){
cin >> N;
for (int i=0; i<N; i++){
cin >> D[i];
}
}
double sol(){
double k = 1;
double ans_k = 0;
for(int i =0; i<N; i++){
double new_k = k*D[i];
ans_k = max(ans_k , new_k);
if(new_k > 1) k = new_k;
else k = 1;
}
return round(ans_k*1000) / 1000;
}
int main(){
double ans = -1;
InputData();
ans = sol();
printf("%.3lf\n", ans);
return 0;
}
반응형
'코딩테스트 > C++ 문제풀이' 카테고리의 다른 글
[백준] 참외밭 (0) | 2022.11.27 |
---|---|
[정올] Uniqueness (0) | 2022.11.27 |
[백준] 빙고 (0) | 2022.11.27 |
[백준] 자리배정 (0) | 2022.11.27 |
[백준] 싸이클 (0) | 2022.11.27 |