반응형
문제
풀이
블록을 검은색, 빗물이 차는 곳을 파란색이라고 하면
예시 1
양 쪽 끝에 검은 영역이 있을 때, 그 사이의 모든 영역이 파란 영역이 됩니다.
예시 2
마찬가지로 양쪽 끝에 검은 영역이 있으면, 그 사이의 모든 영역이 파란 영역이 됩니다.
따라서 map을 전부 순회하면서, 블록과 블록 사이의 영역을 모두 구해줍니다.
소스 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#include <iostream>
using namespace std;
int map[500][500];
int main()
{
// 입력, 0 : 빈 곳, 1 : 블록
int H, W;
cin >> H >> W;
int height;
for (int i = 0; i < W; i++) {
cin >> height;
for (int j = H - height; j < H; j++) {
map[j][i] = 1;
}
}
// 전 영역을 돌면서 검사
int raindrop = 0;
for (int i = 0; i < H; i++) {
int start = -1;
for (int j = 0; j < W; j++) {
// 블록일 때
if (map[i][j] == 1) {
if (start != -1) {
// 현재 위치와 start 사이 만큼 빗물이 찬다.
raindrop += j - start - 1;
}
// start 갱신
start = j;
}
}
}
cout << raindrop;
return 0;
}
|
cs |
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 2206] 벽 부수고 이동하기 C++ (0) | 2021.10.09 |
---|---|
[백준 1987] 알파벳 C++ (0) | 2021.10.08 |
[백준 13398] 연속합 2 C++ (0) | 2021.10.07 |
[백준 2660] 회장뽑기 C++ (0) | 2021.10.05 |
[백준 5582] 공통 부분 문자열 C++ (0) | 2021.10.03 |