' 벽과 벽 사이의 빈 공간에는 무조건 빗물이 채워질 수 있다 '는 아이디어로 작성하게 된 코드이다
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. 빗물이 들어갈 수 있는 공간들의 크기를 다 더한 것을 출력
'코테연습문제' 카테고리의 다른 글
[Programmers/Python] 이모티콘 할인행사 (0) | 2023.06.16 |
---|---|
[Programmers/Python] 신규 아이디 추천 (0) | 2023.06.15 |
[백준/Python] 1205 등수 구하기 (0) | 2023.06.15 |
[백준/Python] 20055 컨베이어 벨트 위의 로봇 (0) | 2023.06.14 |
[백준/Python] 20006 랭킹전 대기열 (1) | 2023.06.13 |