프로그래밍/백준

[알고리즘] 백준 2670 파이썬 - 연속부분최대곱

매 석 2023. 4. 3. 23:01
반응형

 

 

2670번: 연속부분최대곱

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

www.acmicpc.net

문제

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

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

 

문제풀이

n=int(input())
#01
dp=[float(input()) for _ in range(n)]
for i in range(1,n):
	#02
    dp[i]=max(dp[i-1]*dp[i],dp[i])
print("{:.3f}".format(max(dp)))

- #01 : dp라는 리스트에 입력값을 실수형태로 저장한다.

- #02 : dp[i]에는 현재값과 이전값의 곱과 현재값 중 더 큰 값을 저장한다.

           즉 문제에서 요구하는 "연속"하는 값의 곱 중 가장 큰 값을 얻기 위해

           리스트의 처음부터 끝까지 돌며 최선의 곱셈을 하였을 때 나올 나오는 값을 저장한 것이다.

- #03 : 실수형태로 소수점 3자리까지 dp의 최대값을 출력한다.

 

+ 참고로 dp에 최종적으로 저장된 값이다.