[백준/Java] 14719 - [Gold V] 빗물

2025. 2. 9. 18:20·코딩테스트/백준

[Gold V] 빗물 - 14719

문제 링크

성능 요약

메모리: 15488 KB, 시간: 140 ms

분류

구현, 시뮬레이션

제출 일자

2025년 2월 9일 18:09:19

문제 설명

2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다.

비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까?

입력

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500)

두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치부터 차례대로 W개 주어진다.

따라서 블록 내부의 빈 공간이 생길 수 없다. 또 2차원 세계의 바닥은 항상 막혀있다고 가정하여도 좋다.

출력

2차원 세계에서는 한 칸의 용량은 1이다. 고이는 빗물의 총량을 출력하여라.

빗물이 전혀 고이지 않을 경우 0을 출력하여라.


  1. 주어진 배열을 높이만큼 순회하며 0이 아닐 경우(기둥일 경우) 해당 인덱스를 stack에 넣고 1씩 감소한다.
  2. 기둥과 기둥 사이의 길이를 answer에 추가한다.
import java.util.*;
import java.io.*;

class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int answer = 0;

        StringTokenizer st = new StringTokenizer(br.readLine());
        int H = Integer.parseInt(st.nextToken());
        int W = Integer.parseInt(st.nextToken());
        st = new StringTokenizer(br.readLine());
        int[] arr = new int[W];
        for(int i=0; i<W; i++){
            arr[i] = Integer.parseInt(st.nextToken());
        }

        Stack<Integer> stack = new Stack<>();

        for(int i=0; i<H; i++){
            for(int j=0; j<W; j++){
                if(arr[j] != 0){
                    stack.add(j);
                    arr[j] -= 1;
                }
            }

            if(stack.size()>=1){
                int lastIdx = stack.pop();
                while(!stack.isEmpty()){
                    int n = stack.pop();
                    answer += lastIdx - n - 1;
                    lastIdx = n;
                }
            }
        }

        System.out.println(answer);
        br.close();
    }
}

 

'코딩테스트 > 백준' 카테고리의 다른 글

[백준/Java] 11660 - [Silver I] 구간 합 구하기 5  (0) 2025.02.14
[백준/Java] 13023 - [Gold V] ABCDE  (0) 2025.02.09
[백준/Java] 9012 - [Silver IV] 구간 합 구하기 5  (0) 2025.02.07
[백준/Java] 2667 - [Silver I] 단지번호붙이기  (0) 2025.01.19
[백준/Java] 11403 - [Silver I] 경로 찾기  (0) 2024.12.30
'코딩테스트/백준' 카테고리의 다른 글
  • [백준/Java] 11660 - [Silver I] 구간 합 구하기 5
  • [백준/Java] 13023 - [Gold V] ABCDE
  • [백준/Java] 9012 - [Silver IV] 구간 합 구하기 5
  • [백준/Java] 2667 - [Silver I] 단지번호붙이기
mint723dev
mint723dev
mint723dev 님의 블로그 입니다.
  • mint723dev
    mint723dev 님의 블로그
    mint723dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (90)
      • Computer Science (16)
        • Computer Architecture (0)
        • Data Structure (2)
        • Database (4)
        • Network (4)
        • Operating System (6)
        • Software Engineering (0)
      • Java (6)
      • 자료 구조 (0)
      • 코딩테스트 (64)
        • LeetCode (1)
        • 프로그래머스 (29)
        • 백준 (34)
      • Spring (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    티스토리챌린지
    JVM
    DFS
    오블완
    BFS
    탐욕법
    DP
    deque
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
mint723dev
[백준/Java] 14719 - [Gold V] 빗물
상단으로

티스토리툴바