2670번: 연속부분최대곱
첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나
www.acmicpc.net
코드
n = int(input())
lst = [float(input()) for _ in range(n)]
for i in range(1, n):
lst[i] = max(lst[i], lst[i]*lst[i-1])
print("{:.3f}".format(max(lst)))
실수를 입력받았던 lst에 다이나믹 프로그래밍을 그대로 적용한다. lst가 i번째까지의 곱의 최댓값을 담는 배열이 된다.
이어지는 수열이 현재의 값보다 큰 경우, 즉 lst[i]*lst[i-1] > lst[i]라면 lst[i]의 값을 lst[i]*lst[i-1]로 바꿔주며 배열의 끝까지 가면 된다.배열의 끝까지 연산하면 lst에 있는 값들은 각 자리를 마지막 원소로 포함한 배열의 곱 최대값이 저장되게 된다. 그러므로 lst에 저장된 값 중 최대값을 찾아서 소수점 셋째 자리까지 출력해준다.
'문제풀이 > DP' 카테고리의 다른 글
[Python/파이썬] 백준 2157번 여행 (0) | 2024.04.24 |
---|---|
[Python/파이썬] 백준 1757번 달려달려 (0) | 2024.04.09 |
[Python/파이썬] 백준 1823번 수확 (0) | 2024.02.16 |
[Python/파이썬] 백준 4095번 최대 정사각형 (0) | 2024.02.10 |
[Python/파이썬] 백준 17484번 진우의 달 여행 (Small) (0) | 2024.02.04 |