반응형
이 문제는 Codility 사이트에서 확인하고 문제를 풀 수 있습니다.
문제.
설명
배열 A가 주어 집니다.
배열 A의 요소에는 -1,000 ~ 1,000의 정수가 있습니다.
배열 A의 요소중 3개를 곱했을 때 가장 큰 수를 return하는 문제입니다.
주의해야할 점은 총 3가지 입니다.
1. 모두 음수일 경우.
2. 음수 * 음수 = 양수 의 값이 양수 * 양수보다 클 경우.
3. 음수 * 음수의 곱이 양수 * 양수 의 곱보다 작을 경우.
애초에 Codility의 Lessons부분이 Sorting으로 되어 있는데.....
저는 그냥 무식한 방법으로 풀었습니다. ㅡㅡ.
결과
// you can use includes, for example:
// #include <algorithm>
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
void sort_Arr(int* arr){
for(int i = 0; i < 2; i++)
if(arr[i] > arr[i + 1])
arr[i] ^= arr[i + 1] ^= arr[i] ^= arr[i + 1];
if(arr[0] > arr[1])
arr[0] ^= arr[1] ^= arr[0] ^= arr[1];
}
int solution(vector<int> &A) {
// write your code in C++14 (g++ 6.2.0)
int arr[3] = ;
int M_min = A.at(0), M_max = A.at(1);
int count = 0;
if(A.size() == 3)
return A.at(0) * A.at(1) * A.at(2);
else
sort_Arr(arr);
if(M_max > M_min)
M_min ^= M_max ^= M_min ^= M_max;
if(M_min > A.at(2))
M_min = A.at(2);
if(M_max > M_min)
M_min ^= M_max ^= M_min ^= M_max;
for(int i = 3; i < A.size(); i++){
if(arr[0] < A.at(i)){
arr[0] = A.at(i);
sort_Arr(arr);
}
if(M_min > A.at(i)){
M_min = A.at(i);
if(M_min < M_max)
M_min ^= M_max ^= M_min ^= M_max;
}
}
for(int i = 0; i < A.size(); i++)
if(A.at(i) < 0)
count++;
if(M_min * M_max > arr[0] * arr[1])
if(count == A.size())
return arr[0] * arr[1] * arr[2];
else
return M_min * M_max * arr[2];
else
return arr[0] * arr[1] * arr[2];
}
https://app.codility.com/demo/results/trainingX83FEU-ZXV/
꼴보기 싫어지는 코드내요..... 다른사람 풀이를 보고 정렬이 이 문제의 열쇠임을 깨닫고
해탈한 마음으로 다시 코드를 짯습니다.....
// you can use includes, for example:
#include <algorithm>
using namespace std;
// you can write to stdout for debugging purposes, e.g.
// cout << "this is a debug message" << endl;
int solution(vector<int> &A) {
// write your code in C++14 (g++ 6.2.0)
int index = A.size() - 1;
int P_max, M_max;
sort(A.begin(), A.end());
P_max = A.at(index - 1) * A.at(index - 2);
M_max = A.at(0) * A.at(1);
if(M_max > P_max){
if(A.at(index) < 0)
return P_max * A.at(index);
else
return M_max * A.at(index);
}else
return P_max * A.at(index);
}
반응형
'코딩테스트 > Codility' 카테고리의 다른 글
[C++ 풀이] Codility - Lessons 6, (Sorting) Triangle (0) | 2019.09.02 |
---|---|
[C++ 풀이] Codility - Lessons 6, (Sorting) Distinct (0) | 2019.08.18 |
[C++ 풀이] Codility - Lessons 5, (Prefix Sums) CountDiv (0) | 2019.08.08 |
[C++ 풀이] Codility - Lessons 5, (Prefix Sums) MinAvgTwoSlice (0) | 2019.08.04 |
[C++ 풀이] Codility - Lessons 5, (Prefix Sums) GenomicRangeQuery (0) | 2019.08.01 |
댓글