[Codility] StoneWall

hamsteak·2023년 10월 10일
0

ps

목록 보기
34/39

가능한 적은 수의 돌을 써서 주어진 배열 H에 맞게 돌벽을 짓는 문제.

낮은 벽에 사용되는 돌이 큰 돌의 받침에도 쓰이도록 했을 때, 항상 최소 개수만이 요구된다는 점을 이용하면 된다.

h 크기의 벽 뒤에 더 큰 벽을 쌓고 다시 h 크기의 벽을 쌓아야 한다면 새로운 돌이 필요가 없다. 스택을 이용하면 큰 벽을 쌓고 다시 낮은 벽이 요구될 때 큰 벽 이전의 벽 크기와 비교할 수 있다.

https://app.codility.com/programmers/lessons/7-stacks_and_queues/stone_wall/

cpp code

#include <stack>

int solution(vector<int> &H) {
    int ans = 0;
    stack<int> S;
    int cur_h = 0;
    for (int i = 0; i < H.size(); i++) {
        while (H[i] < cur_h) {
            cur_h = S.top();
            S.pop();
        }
        if (H[i] > cur_h) {
            S.push(cur_h);
            cur_h = H[i];
            ans++;
        }
    }
    return ans;
}
profile
안녕하세요

0개의 댓글