Furthest Building You Can Reach

ㅋㅋ·2022년 6월 21일
0

알고리즘-leetcode

목록 보기
16/135

빌딩들의 높이 벡터와 사용할 수 있는 벽돌과 사다리의 개수가 주어진다.

현재 빌딩보다 다음 빌딩이 높을 경우 벽돌과 사다리를 사용해야 하는데,

벽돌은 두 빌딩 높이의 차이만큼 사용해야하고,

사다리는 높이와 관계없이 하나를 사용한다.

위 조건에서 빌딩을 몇 개 넘어갈 수 있는지를 구하는 문제이다.

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;
    }
};

0개의 댓글