Algorithm
HackkerRank - Sherlock and Array, Marc's Cakewalk, Grid Challenge, Maximum Perimeter Triangle
HI2
2021. 3. 22. 20:26
[풀이 - Sherlock and Array] : <Easy / 80.53%>
더보기
string balancedSums(vector<int> arr)
{
int left = 0, right = 0, total = 0;
//
if(arr.size() == 1)
return "YES";
//
for(int i = 0; i < arr.size(); ++i)
total += arr[i];
//
for(int i = 0; i < arr.size(); ++i)
{
if(i-1 >= 0)
left += arr[i-1];
right = total - left - arr[i];
if(left == right)
return "YES";
}
//
return "NO";
}
[풀이 - Marc's Cakewalk] : <Easy / 96.17%>
더보기
long marcsCakewalk(vector<int> calorie)
{
long result = 0;
//
sort(calorie.begin(), calorie.end(), greater<int>());
int count = calorie.size();
for(int i = 0; i < count; ++i)
result += pow(2, i) * calorie[i];
//
return result;
}
[풀이 - Grid Challenge] : <Easy / 83.22%>
더보기
string gridChallenge(vector<string> grid)
{
int row = grid.size();
int col = grid[0].length();
//
for(int i = 0; i < row; ++i)
sort(grid[i].begin(), grid[i].end());
//
for(int i = 1; i < row; ++i)
{
for(int j = 0; j < col; ++j)
{
int value = grid[i][j] - grid[i-1][j];
if(value < 0)
return "NO";
}
}
//
return "YES";
}
[풀이 - Maximum Perimeter Triangle] : <Easy / 90.57%>
더보기
long CheckTriangle(vector<int> arr)
{
sort(arr.begin(), arr.end());
if((long)arr[2] >= (long)arr[0] + (long)arr[1])
return -1;
else
return ((long)arr[0] + (long)arr[1] + (long)arr[2]);
}
//
void Combination(vector<vector<int>>& result, vector<int> arr, int count)
{
result.clear();
//
int size = arr.size();
vector<bool> v(size, true);
for(int i = 0; i < size - count; ++i)
v[i] = false;
//
do
{
vector<int> temp;
for(int i = 0; i < size; ++i)
if(v[i] == true)
temp.push_back(arr[i]);
//
result.push_back(temp);
} while (next_permutation(v.begin(), v.end()));
}
// Complete the maximumPerimeterTriangle function below.
vector<int> maximumPerimeterTriangle(vector<int> sticks)
{
vector<int> result;
// create combinations
vector<vector<int>> combinations;
Combination(combinations, sticks, 3);
// check triangle
long maxPerimeter = -1;
int maxIdx = 0;
for(int i = 0; i < combinations.size(); ++i)
{
long perimeter = CheckTriangle(combinations[i]);
if(perimeter > maxPerimeter)
{
maxPerimeter = perimeter;
maxIdx = i;
}
}
if(maxPerimeter == -1) // no result
result.push_back(-1);
else // check max perimeter
{
sort(combinations[maxIdx].begin(), combinations[maxIdx].end());
result = combinations[maxIdx];
}
//
return result;
}