인접한 원소들과 곱셈(product)을 했을 때, 가장 큰 결과값을 반환하도록 코드를 짜야한다.
문제 풀이
이 문제는 곱셉을 할 수 있는 모든 가능성을 구하기 위하여 list의 범위를 특정짓는 방법으로 2중 for문으로 순회를 하여 풀 수도 있다.(각각의 for문의 값은 시작 Index와 끝 Index) 다만, Time Limit Exceeded가 나온다. Input 값이 매우매우 클 수도 있기 때문에 이미 예상된 결과이기도 하다.
주어진 Input의 list에는 음수의 값도 포함되어 있기 때문에, (음수*음수)는 양의 정수가 되고 이 값이 최대값이 될 수도 있다는 점을 놓쳐서는 안된다. 따라서 음수와 음수가 만나 최댓값이 될 경우의 수를 포함해 결과값을 비교하기 위해 지금까지의 곱셈의 결과값 중에 가장 최소인 결과값과 가장 최대인 결과값을 다음 원소와 곱해나가면서 최대 결과값을 구해내면 된다. 아래의 코드를 돌려보면 이해하기 더 쉽다. 코드는 LeetCode discuss에서 올려주신 분의 코드를 추가하였다.
파이썬 코드 - Time Limit Exceeded
1
2
3
4
5
6
7
8
9
10
|
from functools import reduce
class Solution:
def maxProduct(self, nums):
maximum = nums[0]
for i in range(len(nums)):
for j in range(i, len(nums)):
maximum = max(maximum, reduce(lambda x, y: x * y, nums[i:j+1]))
return maximum
|
cs |
파이썬 코드 - 최대값과 최솟값 활용
1
2
3
4
5
6
7
|
class Solution:
def maxProduct(self, nums):
maximum = big = small = nums[0]
for n in nums[1:]:
big, small = max(n, n * big, n * small), min(n, n * big, n * small)
maximum = max(maximum, big)
return maximum
|
cs |
'온라인 코딩 테스트 문제 풀이 > LeetCode 문제 풀이' 카테고리의 다른 글
Python으로 푸는 LeetCode 268. Missing Number (Easy) (0) | 2019.04.26 |
---|---|
Python으로 푸는 LeetCode 21. Merge Two Sorted Lists (Easy) (0) | 2019.04.25 |
Python으로 푸는 LeetCode 151. Reverse Words in a String (Medium) (0) | 2019.04.22 |
Python으로 푸는 LeetCode 48. Rotate Image (Medium) (0) | 2019.04.19 |