오늘의 알고리즘

[C++] 백준 14719 빗물

하늘하늘 . 2022. 5. 31. 14:35
#include <iostream>
 
bool visit[501][501] = {};
 
int main()
{
    int H = 0;
    int W = 0;
    std::cin >> H >> W;
 
    for (int i = 0; i < W; ++i)
    {
        int iNumber = 0;
        std::cin >> iNumber;
 
        while (iNumber--)
        {
            visit[iNumber][i] = true;
        }
    }
 
    int iSum = 0;
 
    for (int i = 0; i < H; ++i)
    {
        int iCount = 0;
        bool bWall = false;
 
        for (int j = 0; j < W; ++j)
        {
            if (visit[i][j])
            {
                if (bWall)
                {
                    iSum += iCount;
                    iCount = 0;
                }
 
                else
                {
                    bWall = true;
                    iCount = 0;
                }
            }
 
            else
                ++iCount;
        }
    }
 
    std::cout << iSum;
    return 0;
}​

위에서 부터 쌓은 후 위에서 부터 양 옆에 벽이 있는지 체크