nC2 문제이다.
2개만 뽑으면 되기에 2중 for문을 도는 방법도 있고, 간단하게는 내림차순 정렬 후, 앞에 두 녀석을 곱해줘도 된다.
하지만, 나는 조합을 사용해보았다.
#include <string>
#include <vector>
#include <climits>
#include <algorithm>
using namespace std;
int solution(vector<int> numbers) {
int multi = 1;
int answer = INT_MIN;
vector<bool> select(numbers.size(), false);
select[0] = select[1] = true;
do
{
multi = 1;
for (int i = 0; i < numbers.size(); ++i)
{
if (select[i])
multi *= numbers[i];
}
if (multi > answer)
answer = multi;
} while (prev_permutation(select.begin(), select.end()));
return answer;
}
정렬의 경우, 음수릃 고려하지 않기에 예외를 생각해야한다.
return max(numbers[n-1]*numbers[n-2],numbers[0]*numbers[1]);
'학습(0) > C++ 문제풀이' 카테고리의 다른 글
가장 큰 수 찾기 / distance() (0) | 2025.03.12 |
---|---|
인덱스 바꾸기/ swap (0) | 2025.03.12 |
세균증식/ 2와 관련 된 건 비트 연산 (0) | 2025.03.11 |
중복 문자 제거/string::find (0) | 2025.03.11 |
소인수분해 (0) | 2025.03.11 |