헝D의 일기장
article thumbnail

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

 

14719번: 빗물

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

www.acmicpc.net

 

 

나의풀이

import java.io.*;
import java.util.*;
public class Main {
    public static void main(String args[]) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());
        
        int h = Integer.parseInt(st.nextToken());//세로
        int w = Integer.parseInt(st.nextToken());//가로
        
        int[][] arr = new int[w][h];//2차원 좌표
        
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<w ; i++){
            int temp=Integer.parseInt(st.nextToken());
            for(int j=0 ; j<temp ; j++){
                arr[i][j]=1 ; //블록이 있는 곳을 1로 표시
            }
        }
        
        int answer=0;
        
        for(int i=0; i<h; i++){
            int cnt=0;
            boolean start=false;
            for(int j=0; j<w; j++){//맨 밑에서부터 한줄씩 
                if(start == false && arr[j][i] == 1){//블록이 있을 때부터 카운트 시작
                    start=true;
                    continue;
                }
                if(start == true && arr[j][i] == 0){
                    cnt++;
                }
                if(start == true && arr[j][i] == 1){//끝나는 벽이 나타났을때 카운트 종료
                    answer+=cnt;
                    cnt=0;
                }
            }
        }
        bw.write(Integer.toString(answer));


        bw.flush();
        br.close();
        bw.close();
        
    }
}

 

Tip.

간단한 구현 문제. 

2차원 좌표 속에서 맨 밑에 줄 부터 위로 올라가면서 각 줄마다 시작 블록이 있을 때 카운트를 시작하고, 종료 블록이 있을때 카운트를 종료한다.  

profile

헝D의 일기장

@헝D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!