개발 블로그
article thumbnail

 

아이디어

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
profile

개발 블로그

@하얀.손

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!