[백준] 14719번: 빗물

Narcoker·2023년 5월 30일
0

코딩테스트

목록 보기
103/150

문제

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

풀이

입력값을 가지고 다음 그림처럼 2차원 배열을 생성한다.
벽인 곳은 True, 벽이 아닌 물이 들어갈 수 있는 곳은 False를 저장한다.

한 행씩 검사한다.
벽이 나오면 카운팅을 시작한다.
카운팅 도중에 벽이 나오면 카운팅한 빗물을 결과 값에 더해준다.
그리고 카운팅한 빗물 수를 다시 0으로 만들어준다.

물인 경우에는 카운팅을 진행한다.

H, W = map(int, input().rstrip().split(' '))
blocks = list(map(int, input().rstrip().split(' ')))


def solution(H, W, blocks):
    answer = 0
    board = [[False for _ in range(W)] for _ in range(H)]

    for i in range(W):
        for count in range(H - 1, H - blocks[i] - 1, -1):
            board[count][i] = True

    for row in board:
        flag_counting = False
        rain = 0
        for block in row:
            if block: # 벽이면
                if not flag_counting:
                    flag_counting = True
                else:
                    answer += rain
                    rain = 0
            else: # 물이면
                if flag_counting:
                    rain += 1
    print(answer)
    return

solution(H, W, blocks)
profile
열정, 끈기, 집념의 Frontend Developer

0개의 댓글