<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> 💡 위 문제를 해결하기 위해서 여러가지 방법으로 할 수 있을것같다.

  1. 리스트 정렬
  2. headq 사용
  3. headq.heapify() 사용
  4. headq.nlargest() 사용
  5. 직접 이진최대힙 구현하기. </aside>

코드 정리

<aside> 💡 자세한 설명은 이전에 풀어보았던 배열의 K번재 큰 요소 문제에서 했으므로 생략한다.

</aside>

(1) 리스트 정렬 사용

# 리스트 정렬 사용
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]))

(2) heapq 모듈 사용

# 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]))

(3) heapq.heapify() 사용

# 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]))