첫 번째 풀이
l = []
for _ in range(n:=int(input())):
l.append(float(input()))
s = []
for i in range(n):
temp = l[i]
s.append(temp)
for j in range(i+1,n):
temp *= l[j]
s.append(temp)
print(round(max(s),3))
메모리 초과
두 번째 풀이
l = []
for _ in range(n:=int(input())):
l.append(float(input()))
max = max(l)
for i in range(n):
temp = l[i]
for j in range(i+1,n):
temp *= l[j]
if temp > max:
max = temp
print(round(max, 3))
시간 초과
세 번째 풀이
l = []
for _ in range(n:=int(input())):
l.append(float(input()))
m = max(l)
for i in range(n):
temp = l[i]
for j in range(i+1,n):
temp *= l[j]
if temp > m:
m = temp
print('%.3f' % m)
고수의 풀이
n=int(input())
a=[float(input())for _ in[0]*n]
for i in range(1,n):a[i]=max(a[i-1]*a[i],a[i])
print(f'{max(a):.3f}')
CODE REVIEW
- 메모리 초과 문제를 해결하기 위해 list에서 max를 뽑아내지 않고 m(현재 최댓값)보다 크면 update, 크지 않다면 그대로 pass로 바꾸어주었다.
- 문제 출력 형식이 소수 셋째 자리까지 맞추어줘야하므로
round()
함수 대신'%.3f % m
처럼 소숫점 출력 형식으로 바꾸어주었다. - 고수의 풀이 방식이 메모리도 덜 차지하고 시간도 빠른데, 각 자리별로 구할 수 있는 max값을 a[i]에 할당하고, 그것의 max를 구한다는 아이디어였다.
- python에서 max, min같은 이름은 변수에 붙이지 않는걸 권장한다! 웬만하면 다른 이름을 쓰자