728x90
시간 제한 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
'ALGORITHM > DP(동적 계획법)' 카테고리의 다른 글
[백준 13699번] 파이썬 - 점화식 (0) | 2024.05.29 |
---|---|
[백준 11048번] 파이썬 - 이동하기 (0) | 2024.05.06 |
[백준 2193번] 파이썬 - 이친수 (1) | 2024.03.25 |
[백준 17291번] 파이썬 - 새끼치기 (0) | 2024.02.23 |
[백준 10971번] 파이썬 - 외판원 순회2 (0) | 2024.01.16 |