백준 2670번 - 연속부분최대곱
백준 2670번 바로가기 첫 번째 풀이 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같은 이름은 변수에 붙이지 않는걸 권장한다! 웬만하면 다른 이름을 쓰자