숫자로 이루어진 리스트 nums가 주어졌을 때, 서로 다른 세 요소를 곱하여 만들 수 있는 가장 큰 값을 찾는 문제입니다.
예를 들어 입력이 nums = [6, 1, 2, 4, -3, -4]라면 출력은 72가 됩니다. 음수끼리 곱하면 양수가 되기 때문에 (-3) × (-4) × 6 = 72라는 결과를 얻을 수 있습니다.
해결 접근 방법
이 문제는 리스트를 한 번 정렬한 뒤, 가능한 두 가지 후보 조합만 비교하면 효율적으로 해결할 수 있습니다.
- 리스트
nums를 오름차순으로 정렬합니다. n을nums의 길이로 설정합니다.maxScore를 매우 작은 값(-inf)으로 초기화합니다.- '가장 작은 두 수 × 가장 큰 수'(
nums[0] * nums[1] * nums[n-1])과maxScore를 비교하여 더 큰 값을 저장합니다. - '가장 큰 세 수'의 곱(
nums[n-3] * nums[n-2] * nums[n-1])과도 비교하여 더 큰 값을 저장합니다. maxScore를 반환합니다.
음수가 두 개 이상 포함된 경우에는 음수 × 음수 = 양수가 되어 오히려 더 큰 곱이 만들어질 수 있습니다. 따라서 '가장 큰 세 양수의 곱'과 '가장 작은 음수 두 개와 가장 큰 양수의 곱'이라는 두 가지 경우를 반드시 모두 고려해야 합니다.
예제 코드
다음 구현을 통해 더 자세히 이해할 수 있습니다.
def solve(nums):
nums.sort()
n = len(nums)
maxScore = -10000
maxScore = max(maxScore, nums[0] * nums[1] * nums[n - 1])
maxScore = max(maxScore, nums[n - 3] * nums[n - 2] * nums[n - 1])
return maxScore
nums = [6, 1, 2, 4, -3, -4]
print(solve(nums))입력
[6, 1, 2, 4, -3, -4]
출력
72