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)으로 그대로 구현해주면 정답을 받을 수 있다.
728x90