본문 바로가기

알고리즘

백준 알고리즘 2670 연속부분 최대곱

문제

N개의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력하는 프로그램을 작성하시오. 예를 들어 아래와 같이 8개의 양의 실수가 주어진다면,

색칠된 부분의 곱이 최대가 되며, 그 값은 1.638이다.

입력

첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나 같고, 9.9보다 작거나 같다.

 

 

풀이방법

1. 입력한 수를 배열에 넣는다.

2. 배열에 담긴 숫자를 0번째부터 순서대로 곱한다.

3. 위에서 차례대로 곱한 값을 최댓 값 MAX와 비교하여 MAX 값보다 크다면 MAX에 값을 넣는다. (MAX값 처음은 1)

4. 숫자를 0번째부터 마지막까지 다 곱했다면, 1번째부터 마지막번째까지 곱하면서 MAX값과 비교한다.

5. 위의 작업을 반복하며 최종 MAX값을 출력한다.

 

 

import java.util.Scanner;

public class Quiz_2670 {
    public static void main(String[] args)   {

        Scanner scanner = new Scanner(System.in);
        int size = scanner.nextInt();

        double[] arr = new double[size];
        for(int i = 0; i < size; i++) {
            arr[i] = scanner.nextDouble();
        }

        double max = 0; // 최대 값을 담을 변수
        double muli = 1; // 배열을 차례대로 곱한 값


        for(int i = 0; i < size; i++) {
            for(int j = i; j < size; j++ ) {
                muli *= arr[j];
                if(muli > max) {
                    max = muli;
                }
            }
            muli = 1;
        }

        System.out.printf("%.3f%n", max);
    }
}

'알고리즘' 카테고리의 다른 글

백준 알고리즘 15624 피보나치 수 7  (0) 2022.09.11
백준 알고리즘 10815 숫자 카드  (0) 2022.08.21