728x90

백준 2670 - 연속부분최대곱

시간 제한 1초, 메모리 제한 128MB

# 조건

  • N개의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력하는 프로그램을 작성하시오.
    • 예를 들어 아래와 같이 8개의 양의 실수가 주어진다면,
1.1 0.7 1.3 0.9 1.4 0.8 0.7 1.4
  • 1.3에서 1.4까지의 곱이 최대가 되며 그 값은 1.638이다.

입력

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

출력

  • 계산된 최댓값을 소수점 이하 넷째 자리에서 반올림하여 소수점 이하 셋째 자리까지 출력한다.

# 접근 방법

  • 브루트포스나 DP로 풀어주면 된다.
  • LOOP를 돌며 dp[i]를 하나씩 계산하면 되는데 이 때, i의 값은 i를 마지막으로하는 수열들의 곱이 최대인 것을 고르면 된다.
  • 또는 수열에 곱하면 수가 적어지는 경우는 i를 시작으로 정하면 된다.
import sys
sys.stdin = open('input.txt')
input = sys.stdin.readline

N = int(input())
number = []
for _ in range(N):
    number.append(float(input()))

for i in range(1, N):
    number[i] = max(number[i], number[i-1] * number[i])

print('%0.3f' % max(number))
728x90