[Programmers] #120847 - 최댓값 만들기(1) [Java][C++][Python]
정수 배열에서 두 원소를 곱해 만들 수 있는 최댓값을 구하는 문제.
[Programmers] #120847 - 최댓값 만들기(1) [Java][C++][Python]
1. 아이디어
두 수의 곱을 최대로 만들려면 각각을 최대한 크게 잡으면 된다. 배열 원소가 모두 0 이상이라 음수 두 개를 곱해 부호가 뒤집히는 경우를 걱정할 필요가 없으므로, 가장 큰 값과 두 번째로 큰 값을 고르면 그 곱이 곧 최댓값이다. 오름차순으로 정렬한 뒤 뒤쪽 두 원소를 곱해 반환한다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N \log N)$ | $O(1)$ |
($N$ = numbers의 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
import java.util.*;
class Solution {
public int solution(int[] numbers) {
Arrays.sort(numbers);
return numbers[numbers.length - 2] * numbers[numbers.length - 1];
}
}
1
2
3
4
5
6
7
#include <bits/stdc++.h>
using namespace std;
int solution(vector<int> numbers) {
sort(numbers.begin(), numbers.end());
return numbers[numbers.size() - 2] * numbers[numbers.size() - 1];
}
1
2
3
def solution(numbers):
numbers.sort()
return numbers[-2] * numbers[-1]
This post is licensed under CC BY 4.0 by the author.