백준

백준14719: 빗물

E재HO 2022. 4. 9. 19:17

빗물 성공

 
 
시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 256 MB 7497 4085 3209 55.005%

문제

2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.

비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까?

입력

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500)

두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다.

따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다.

출력

2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라.

빗물이 전혀 고이지 않을 경우 0을 출력하여라.

예제 입력 1 복사

4 4
3 0 1 4

예제 출력 1 복사

5

예제 입력 2 복사

4 8
3 1 2 3 4 1 1 2

예제 출력 2 복사

5

예제 입력 3 복사

3 5
0 0 0 2 0

예제 출력 3 복사

0

힌트

힌트 1:

힌트 2:

힌트 3:

출처

 

사고 과정

비가 오면 블록 사이에 물이 고인다.
물이 고이려면 고일 수 있는 구덩이가 있어야 한다. 
bfs나 dfs를 이용하면 될 것 같은데
입력이
4 4
3 0 1 4
이런식으로 주어진다
0 0 0 1
1 0 0 1
1 0 0 1
1 0 1 1
이런식으로 배열을 구성해주면 될 것 같다

하나만 더
4 8
3 1 2 3 4 1 1 2

0 0 0 0 1 0 0 0
1 0 0 1 1 0 0 0
1 0 1 1 1 0 0 1
1 1 1 1 1 1 1 1
물이 차기 위한 조건.
우선 옆에 벽이 있어야 한다.
좌측 하단부터 오른쪽으로 
처음 벽을 만나면 cnt를 활성화시키고 
벽을 만나면 전체값에 cnt만큼 더해주고
벽을 만나지 못하면 cnt값을 초기화 시켜주는 방식

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int arr[501][501];
int N, M;
int main() {
    int answer = 0;
    cin >> N >> M;
    int k = 0;
    for (int i = 0; i < M; i++) {
        cin >> k;
        int idx = N-1;
        for (int j = 0; j <k; j++) {
            arr[idx--][i] = 1;
        }
    }

    //for (int i = 0; i < N; i++) {
    //    for (int j = 0; j < M; j++) {
    //        cout << arr[i][j];
    //    }cout << endl;
    //}

    for (int i = N - 1; i >= 0; i--) {
        int cnt = 0;
        bool start = false;
        for (int j = 0; j < M; j++) {
            if (arr[i][j] == 1) {
                if (start == false) {
                    start = true;
                    continue;
                }
                else if (start == true) {
                    answer += cnt;
                    cnt = 0;
                }
            }
            if (start == true && arr[i][j] == 0)
                cnt++;
        }
    }
    cout << answer;
    return 0;
}

 

너무 쉬웠다. 그리고 볼드체로 글을 쓰면 코드가 제대로 나온다는 꿀팁도 알아버렸당.