본문 바로가기

코테연습문제

[백준/Python]14719 빗물

 

' 벽과 벽 사이의 빈 공간에는 무조건 빗물이 채워질 수 있다 '는 아이디어로 작성하게 된 코드이다

2차원 세계에 블록이 쌓여있는 것을 표현한 world 라는 2차원 리스트를 만들었고,

한 줄 씩 돌면서 빗물이 채워질 수 있는 공간의 크기를 구했다

 

H, W = map(int, input().split())
block = [int(i) for i in input().split()]
world = [[0] * W for _ in range(H)]

for i in range(W):
    for j in range(block[i]):
        world[j][i]= 1

answer = 0
for i in range(H):
    start = False
    water = 0
    for j in range(W):
        if world[i][j] == 1:
            start = True
            if start and water > 0:
                answer += water
                water = 0
        elif start and world[i][j] == 0:
            water += 1

print(answer)

풀이과정

1. 2차원 세계에 블록이 쌓여있는 것을 표현한 world 라는 2차원 리스트 만들기

 

2. 한 줄씩 돌아가면서, 처음 만난 블록에서 다음 만나는 블록 사이에 빈 공간의 개수를 셈

2-1. 처음 만난 블록에서 start를 True로 바꿔줌(벽과 벽 사이의 공간을 찾기위해)

2-2. start가 True이고 world가 0이면, 왼쪽이 블록으로 막힌 빈 공간이므로 숫자를 +1

2-3. start가 True이고 world가 1이면서 빈공간이 1 이상이면, 웅덩이가 생긴 것

 

3. 빗물이 들어갈 수 있는 공간들의 크기를 다 더한 것을 출력