https://www.acmicpc.net/problem/2670
2670: 최대 연속 부분 곱
첫 번째 줄은 나열된 양의 실수의 수 N을 제공하고 다음 줄부터 N개의 숫자가 한 줄에 하나씩 포함됩니다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째 자리로 지정되며 0.0보다 커야 합니다.
www.acmicpc.net
1. 난이도 실버 4 ()
2. 문제 해결 방법
DP로 문제를 해결했습니다.
(현재값)과 (이전값까지의 최대 곱 * 현재값) 중 큰 값을 dp로 대입합니다.
round(num, 3) => 소수점 셋째자리까지 출력하되, 1.0이면 1.0으로 출력하여 오답으로 처리한다.
따라서 (‘%.3f’ %max(dp))이어야 합니다.
3. 내가 작성한 코드
n = int(input())
dp = ((0) for _ in range(n))
for i in range(n):
num = float(input())
if i == 0:
dp(0) = num
else:
dp(i) = max(num, dp(i-1) * num)
print('%.3f' %max(dp))
4. 참고 사항
라운드(숫자, n) => num의 n번째 위치까지 출력, 원래 값이 더 짧으면 ex)1.0만 출력
.’%.nf’ %숫자 => num의 n번째 자리까지 출력, 원래 값이 작을 경우 0을 기준으로 출력 ex)1.000
+ ‘{}’.format(‘값’) => 값