인덱스 주머니에 담긴 돌의 양을 나타내는 정수형 벡터와
특정한 처리를 할 수 있는 횟수를 나타내는 k를 받는다.
처리란 특정 인덱스의 담긴 돌의 양의 1/2에서
소수점 자리의 수는 내림한 양을 빼는 것이다.
그 처리를 k번 반복하여 최소로 만들 수 있는 돌의 양을 구하는 문제
class Solution {
public:
int minStoneSum(vector<int>& piles, int k) {
map<int, int, greater<int>> stoneTable{};
int length = piles.size();
int sum{0};
for (int i = 0; i < length; i++)
{
stoneTable[piles[i]]++;
sum += piles[i];
}
while (0 < k)
{
int target = stoneTable.begin()->first;
stoneTable[target]--;
if (stoneTable[target] == 0)
{
stoneTable.erase(target);
}
int sub = std::floor(target >> 1);
target -= sub;
sum -= sub;
stoneTable[target]++;
k--;
}
return sum;
}
};