[백준] 2670번

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(‘값’) => 값