🔅코딩테스트 공부🔅/❗백준
[백준] 2670번 연속부분최대곱(python)(dp)
윤무무
2023. 3. 1. 18:31
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