아이디어
dp[i] 를 i 번째 숫자를 포함해 연속된 수의 곱이 최대가 될 때의 값이라고 정의하면
dp[i] = Math.max(1, dp[i - 1]) * i번째 숫자
가 된다.
i - 1 번째 숫자를 포함해 연속된 수 곱의 최대값이 1보다 작은 경우 i 번째 숫자에 곱했을 때 i 번째 숫자보다 더 작은 값을 얻게 되기 때문이다.
그리고 소수점 이하 셋째 자리까지 출력하는 것은 printf 함수를 사용하면 된다.
*Math.round( number * 1000) / 1000.0 도 소수점 아래 넷째 자리에서 반올림한 값을 얻을 수 있긴하지만 소수점 아래가 0인 경우 절삭이 되므로 .000 과 같이 무조건 소수점 아래 셋째 자리까지 출력하기 위해서는 적합하지 않은 방법이다.
풀이코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
double[] numbers = new double[N];
for (int i = 0; i < N; i++) {
numbers[i] = Double.parseDouble(br.readLine());
}
double[] dp = new double[N];
dp[0] = numbers[0];
double result = dp[0];
for (int i = 1; i < N; i++) {
dp[i] = Math.max(1, dp[i - 1]) * numbers[i];
result = Math.max(result, dp[i]);
}
System.out.printf("%.3f", result);
}
}
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
1439번. 뒤집기 (0) | 2023.10.25 |
---|---|
16956번. 늑대와 양 (0) | 2023.10.25 |
10026번. 적록색약 (1) | 2023.10.22 |
1005. ACM Craft (0) | 2023.10.22 |
20542번. 받아쓰기 (0) | 2023.10.22 |