728x90
문제
N개의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력하는 프로그램을 작성하시오. 예를 들어 아래와 같이 8개의 양의 실수가 주어진다면,
색칠된 부분의 곱이 최대가 되며, 그 값은 1.638이다.
입력
첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나 같고, 9.9보다 작거나 같다.
출력
계산된 최댓값을 소수점 이하 넷째 자리에서 반올림하여 소수점 이하 셋째 자리까지 출력한다.
풀이
다이나믹 프로그래밍을 이용하여 i번째의 숫자까지의 곱 중 가장 큰 값만 이용한다.
코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n=Integer.parseInt(br.readLine());
double max=0;
double[] arr = new double [n], dp=new double [n];
for(int i=0;i<n;i++) {
arr[i] = Double.parseDouble(br.readLine());
dp[i]=arr[i];
}
for(int i=1;i<n;i++) {
dp[i]=Math.max(dp[i-1]*dp[i], dp[i]);
max=Math.max(max, dp[i]);
}
System.out.println(String.format("%.3f", max));
}
}
728x90
728x90
'Algorithm > Baekjoon' 카테고리의 다른 글
Baekjoon 15961 회전 초밥 JAVA (0) | 2022.04.10 |
---|---|
Baekjoon 2531 회전 초밥 JAVA (0) | 2022.04.10 |
Baekjoon 11053 가장 긴 증가하는 부분 수열 JAVA (0) | 2022.04.05 |
Baekjoon 18111 마인크래프트 JAVA (0) | 2022.04.05 |
Baekjoon 15962 새로운 시작 Text (0) | 2022.04.05 |
댓글