본문 바로가기
🔅코딩테스트 공부🔅/❗백준

[백준] 2670번 연속부분최대곱(python)(dp)

by 윤무무 2023. 3. 1.

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. 메모

round(num, n) => num의 n번째 자리까지 출력, 원래 값이 더 짧았을 경우엔 그냥 출력됨 ex)1.0

 

.'%.nf' %num => num의 n번째 자리까지 출력, 원래 값이 더 짧으면 0으로 자릿수가 맞춰서 출력됨 ex)1.000

 

+ '{}'.format('value') => value

댓글