빌딩들의 높이 벡터와 사용할 수 있는 벽돌과 사다리의 개수가 주어진다.
현재 빌딩보다 다음 빌딩이 높을 경우 벽돌과 사다리를 사용해야 하는데,
벽돌은 두 빌딩 높이의 차이만큼 사용해야하고,
사다리는 높이와 관계없이 하나를 사용한다.
위 조건에서 빌딩을 몇 개 넘어갈 수 있는지를 구하는 문제이다.
class Solution {
public:
int furthestBuilding(vector<int>& heights, int bricks, int ladders) {
int heightsSize = heights.size() - 1;
priority_queue<int> pq{};
int i{0};
while (i < heightsSize)
{
int heightDifference = heights[i + 1] - heights[i];
if (0 < heightDifference)
{
if (heightDifference <= bricks)
{
bricks -= heightDifference;
pq.push(heightDifference);
}
else if (0 < ladders)
{
ladders--;
if (pq.empty() == false && heightDifference < pq.top())
{
bricks += (pq.top() - heightDifference);
pq.pop();
pq.push(heightDifference);
}
}
else
{
break;
}
}
i++;
}
return i;
}
};