문제: 빗물 (백준 14719번)
문제 분석
- 문제 개요:
주어진 높이 hh 와 너비 ww 의 2차원 공간에서, 블록이 쌓인 형태가 주어진다.
이때 빗물이 고일 수 있는 칸의 개수를 구하는 문제이다. - 핵심 개념:
- 특정 위치에 빗물이 고이려면 왼쪽과 오른쪽에 블록이 있어야 한다.
- 각 칸에서 왼쪽과 오른쪽에 블록이 있는지 확인하는 방식으로 문제를 해결
코드 설명
#include <bits/stdc++.h>
using namespace std;
template <typename Iterator>
bool Check(Iterator start, Iterator end)
{
for (; start != end; ++start)
{
if (*start) return true;
}
return false;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int h, w;
cin >> h >> w;
vector<vector<bool>> v(h, vector<bool>(w));
// 블록 입력
for (int i = 0; i < w; i++)
{
int input;
cin >> input;
for (int j = 0; j < input; j++)
{
v[j][i] = true;
}
}
int answer = 0;
// 빗물 계산
for (int i = 0; i < h; i++)
{
for (int j = 0; j < w; j++)
{
if (v[i][j] == true) continue; // 블록이 있는 곳은 제외
// 현재 위치의 오른쪽과 왼쪽에 블록이 있는지 확인
if (Check(v[i].begin() + j, v[i].end()) && Check(v[i].rbegin() + (w - j), v[i].rend()))
answer++;
}
}
cout << answer;
}
'C++ > Algorithm' 카테고리의 다른 글
[C++] 백준/Gold/1253. 좋다 (0) | 2025.03.13 |
---|---|
[C++] 백준/Gold/2023. 신기한 소수 (0) | 2025.03.12 |
[C++] 백준/Gold/27172. 수 나누기 게임 (0) | 2025.03.10 |
[C++] 백준/Silver/1487. 물건 팔기 (0) | 2025.03.05 |
[C++] 백준/Silver/15903. 카드 합체 놀이 (0) | 2025.03.04 |