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

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

'오늘의 알고리즘' 카테고리의 다른 글

[C++] 백준 5972 택배 배송  (0) 2022.06.02
[C++] 백준 2493 탑  (0) 2022.06.01
[C++] 백준 16234번 인구 이동  (0) 2022.05.30
[C++] 백준 17615 볼 모으기  (0) 2022.05.28
[C++] 백준 20437 문자열 게임 2  (0) 2022.05.27

+ Recent posts