PS

BOJ 14719 : 빗물

lickelon 2024. 4. 9. 16:44
  • 문제 링크 : boj.kr/14719
  • 난이도 : G5
  • 태그 : 구현
 

14719번: 빗물

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    int h, w;
    cin >> h >> w;
    vector<int> arr(w);
    for(auto &u : arr) cin >> u;

    int ans = 0;
    for(int i = 1; i < w-1; i++) {
        int l = 0, r = 0;
        for(int j = 0; j < i; j++) {
            l = max(l, arr[j]);
        }
        for(int j = i+1; j < w; j++) {
            r = max(r, arr[j]);
        }
        ans += max(min(r,l) - arr[i], 0);
    }

    cout << ans;

    return 0;
}

풀이

어떤 세로줄에는 min(왼쪽 중 가장 높은 높이, 오른쪽 중 가장 높은 높이) - 그 세로줄의 높이 만큼 물이 쌓인다.

이를 O(n^2)으로 그대로 구현해주면 정답을 받을 수 있다.

'PS' 카테고리의 다른 글

BOJ 25577 : 열 정렬정렬 정  (0) 2024.04.11
BOJ 27279 : 조사전달  (0) 2024.04.10
BOJ 20159 : 동작 그만. 밑장 빼기냐?  (0) 2024.04.08
BOJ 26651 : 팬램그  (1) 2024.04.07
BOJ 23085 : 판치기  (0) 2024.04.06