반응형

https://www.acmicpc.net/problem/14719

 

14719번: 빗물

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

www.acmicpc.net

 

각 가로 지점마다 (좌우의 최고 높이 중 더 낮은 높이) - (현재 높이)와의 차이가 현재 지점에서 고이는 빗물의 양입니다.

 

#include <iostream>
#include <algorithm>
using namespace std;

int h, w, arr[500], ans = 0;

int main() {
	scanf("%d %d", &h, &w);
	for (int i = 0; i < w; i++) {
		scanf("%d", &arr[i]);
	}
	for (int i = 0; i < w; i++) {
		int left = 0, right = 0;
		for (int j = i - 1; j >= 0; j--) {
			left = max(arr[j], left);
		}
		for (int j = i + 1; j < w; j++) {
			right = max(arr[j], right);
		}
		int res = min(left, right) - arr[i];
		if (res > 0) ans += res;
	}
	printf("%d", ans);
}

 

 

아래와 같은 방법으로도 풀 수 있었습니다.

각 높이 별로 가로 지점을 검사하면서, 좌우가 막혀있는 칸들의 개수를 구해주었습니다.

 

#include <iostream>
using namespace std;

int h, w, arr[500], ans = 0;

int main() {
	scanf("%d %d", &h, &w);
	for (int i = 0; i < w; i++) {
		scanf("%d", &arr[i]);
	}
	for (int i = 0; i <= h; i++) {
		int t = -1;
		for (int j = 0; j < w; j++) {
			if (arr[j] > i) {
				if (t == -1) {
					t = j;
				}
				else {
					ans += j - t - 1;
					t = j;
				}
			}
		}
	}
	printf("%d", ans);
}
반응형

'Algorithm' 카테고리의 다른 글

백준 5214 : 환승  (0) 2021.11.17
백준 16398 : 행성 연결  (0) 2021.11.17
백준 17490 : 일감호에 다리 놓기  (0) 2021.11.17
백준 17825 : 주사위 윷놀이  (0) 2021.11.17
백준 3980 : 선발 명단  (0) 2021.11.17

+ Recent posts