<aside> 💡 문제 링크
</aside>
<aside> 💡 입력값 - 배열 nums가 주어진다.
배열에서 가장 큰 수 2개의 인덱스를 구한다 → i, j
(nums[i] -1) * (nums[j] -1)의 값을 구하라.
</aside>
Input: nums = [3,4,5,2]
Output: 12
Explanation: 찾은 인덱스의 값이 다음과 같다면 i=1 and j=2 (indexed from 0),
최대값을 찾은것. 다음 반환 (nums[1]-1)*(nums[2]-1) = (4-1)*(5-1) = 3*4 = 12.
<aside> 💡 위 문제를 해결하기 위해서 여러가지 방법으로 할 수 있을것같다.
<aside> 💡 자세한 설명은 이전에 풀어보았던 배열의 K번재 큰 요소 문제에서 했으므로 생략한다.
</aside>
# 리스트 정렬 사용
class Solution:
def maxProduct(self, nums):
nums.sort()
i = nums.index(nums[-2])
j = nums.index(nums[-1])
return (nums[i] - 1) * (nums[j] - 1)
sol = Solution()
print(sol.maxProduct([3, 4, 5, 2]))
# heapq사용
class Solution:
def maxProduct(self, nums):
heap = list()
for num in nums:
heapq.heappush(heap, -num)
i = -heapq.heappop(heap)
j = -heapq.heappop(heap)
return (i - 1) * (j - 1)
sol = Solution()
print(sol.maxProduct([3, 4, 5, 2]))
# heapify 사용
class Solution:
def maxProduct(self, nums):
heapq.heapify(nums)
for _ in range(len(nums)-2):
heapq.heappop(nums)
i = heapq.heappop(nums)
j = heapq.heappop(nums)
return (i - 1) * (j - 1)
sol = Solution()
print(sol.maxProduct([3, 4, 5, 2]))