반응형
14719번: 빗물
첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치
www.acmicpc.net
구현 문제였습니다.
풀이방법
1. 왼쪽에서 오른쪽으로 보면서 현재 높이가 이전 높이보다 낮다면 여태까지 가장 큰 높이의 블록높이 - 현재 블록의 높이 즉, 가로에서 i번째 위치에서 고이는 빗물의 높이 값을 d[i][0]에 저장합니다. 만약 높다면 가장 높은 높이의 값을 갱신해줍니다.
2. 오른쪽에서 왼쪽으로 보면서 같은 방식을 적용합니다.
3. 다시 처음부터 끝까지 보면서 고인 빗물의 최소값을 다 더한뒤 출력해줍니다.
Code
#include <bits/stdc++.h>
using namespace std;
//i번째 건물 오른쪽으로
//i번째 건물 왼쪽으로
int h, w, big, ans, world[501], d[501][2];
int main(){
cin >> h >> w;
for(int i = 1; i <= w; i++) cin >> world[i];
big = world[1];
for(int i = 2; i <= w; i++){
if(big > world[i]) d[i][0] = big - world[i];
else big = world[i];
}
big = world[w];
for(int i = w - 1; i >= 1; i--){
if(big > world[i]) d[i][1] = big - world[i];
else big = world[i];
}
for(int i = 1; i <= w; i++) ans += min(d[i][0],d[i][1]);
cout << ans;
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 프로그래머스(2018 KAKAO BLIND RECRUITMENT[3차]) : 압축 (0) | 2021.05.04 |
---|---|
(C++) - 백준(BOJ) 16935번 : 배열 돌리기 3 답 (0) | 2021.05.03 |
(C++) - 백준(BOJ) 1722번 : 순열의 순서 (0) | 2021.05.03 |
(C++) - 백준(BOJ) 17135번 : 캐슬 디펜스 (0) | 2021.04.30 |
(C++) - 백준(BOJ) 8972 번 : 미친 아두이노 (0) | 2021.04.29 |