Post

[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.