안드 공부를 해볼까?

[Java] 백준 빗물 본문

알고리즘/백준

[Java] 백준 빗물

문바리 2022. 12. 31. 00:22
728x90

1. 문제 분석

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

 

14719번: 빗물

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

www.acmicpc.net

가로와 세로가 주어지고 각 가로셀마다 높이가 주어진다.

그때 빗물이 몇개 고이는지 확인하는 문제다.

백준에 있는 힌트다. 여기서 가로 기준으로 잘 보면 규칙이 있다.

파란색으로 칠한 부분을 보면 된다. 검은색을 0, 하얀색을 1로 생각해보자.

첫째줄은 0 1 0 0이 된다. 빗물은 1칸 채워진다.

둘째줄은 0 1 1 0이 된다. 빗물은 2칸 채워진다.

셋째줄은 0 1 1 0이 된다. 빗물은 2칸 채워진다.

넷째줄은 0 0 0 1이 된다. 빗물은 0칸 채워진다.

즉, 0과 0 사이에 있는 1의 개수를 세면 된다.

2. 구현

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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

        int height = Integer.parseInt(st.nextToken());
        int width = Integer.parseInt(st.nextToken());
        int[][] info = new int[width][height];

        st = new StringTokenizer(br.readLine());

        for (int i = 0; i < width; i++) {
            int size = Integer.parseInt(st.nextToken());
            for (int j = 0; j < size; j++) {
                info[i][j] = 1;
            }
        }

        int answer = 0;
        for (int i = 0; i < height; i++) {
            boolean flag = false;
            int pos = 0;
            for (int j = 0; j < width; j++) {
                if (info[j][i] == 1) {
                    if (flag) answer += j - pos - 1;
                    else flag = true;
                    pos = j;
                }
            }
        }

        System.out.println(answer);
    }
}

따로 설명할게 없다. 위에 말한대로 구현하면 끝이다.

반응형

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

[Kotlin] 백준 지능형 기차2  (0) 2023.02.24
[Java] 백준 스카이라인 쉬운거  (0) 2023.01.06
[Java] 백준 오르막 수  (0) 2022.12.30
[Java] 백준 세 친구  (0) 2022.12.23
[Java] 백준 최단경로  (0) 2022.12.21
Comments