Remove Stones to Minimize the Total

ㅋㅋ·2022년 12월 28일
0

알고리즘-leetcode

목록 보기
78/135

인덱스 주머니에 담긴 돌의 양을 나타내는 정수형 벡터와

특정한 처리를 할 수 있는 횟수를 나타내는 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;
    }
};

0개의 댓글