개발자 김수진

[백준]14719. 빗물 본문

알고리즘/백준

[백준]14719. 빗물

김수진장 2020. 12. 13. 00:14

[문제]

 

www.acmicpc.net/problem/14719

 

14719번: 빗물

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

www.acmicpc.net

 

[풀이]

 

하반기 어느 기업 코테에서 굉장히 이 문제와 유사한 문제가 나왔었다.

 

현재 위치를 기준으로 왼쪽과 오른쪽으로 나누고 

그 중에서 가장 큰 값을  left, right 변수에 저장한다.

 

left와 right 중에서 작은 값을 고르고 여기서 현재 블록의 높이를 빼주면 

해당 블록의 고이는 빗물의 양이 된다.

 

위와 같은 방식으로 두번째 블록부터 마지막 블록 전까지 반복해주면 된다.

 

 

[코드]

 

시간 : 0ms

#include <iostream>
#include <algorithm>
#define MAX 501

using namespace std;

int W,H;
int block[MAX]={0,};


int main(void)
{
    int total=0;
    
    cin >> H >> W;
    for(int i=0;i<W;i++)    cin >> block[i];
    
    for(int i=1;i<W-1;i++){
        
        int right=0;
        int left=0;
        
        for(int j=0;j<i;j++)    left = max(left, block[j]);
        for(int j=W-1; j>i;j--) right =max(right, block[j]);
        
        total += max( 0 , min(left,right)-block[i]);
    }
   
    cout << total;
    return 0;
}

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 5014번. 스타트링크  (0) 2020.12.14
[백준]11559. Puyo Puyo  (2) 2020.12.13
[백준] 10844. 쉬운 계단 수  (0) 2020.12.07
[백준] 3055. 탈출  (0) 2020.12.03
[백준] 2178. 미로탐색  (0) 2020.11.30