[백준 14179/파이썬(Python)] 빗물
문제 풀이
- 2차원 세계에서 빈공간과 벽을 0과 1로 나누어줌
- 2차원 세계의 가장 바닥부터 왼쪽에서 오른쪽으로 벽인지 아닌지 검사
- temp라는 배열을 만들어준 뒤 왼쪽 벽과 오른쪽 벽에 대한 가로 좌표를 저장
- temp의 길이가 총 2가 되면(왼쪽 벽이 나타난 뒤 오른쪽 벽이 나타나면) 벽이 붙어있는지 검사
- 붙어있지 않으면 빗물이 고이는 부분을 0에서 2로 수정하고 빗물의 양을 count 해줌
# 빗물
h, w = map(int, input().split())
arr = list(map(int, input().split()))
m = [[1] * w for _ in range(h)]
temp = [] #왼쪽의 벽 가로 좌표와 오른쪽에 존재하는 벽 가로 좌표 저장
count = 0
#벽이 아닌 부분을 0으로
for i in range(len(arr)):
depth = h - arr[i]
for j in range(depth):
m[j][i] = 0
for h1 in range(h-1, -1, -1):
for w1 in range(w):
if m[h1][w1] == 1: #벽일 경우 temp에 가로 좌표를 저장
temp.append(w1)
if len(temp) == 2: #오른쪽에 벽이 존재할 경우 검사
if temp[1] - temp[0] == 1: #벽이 붙어있는 경우 왼쪽 벽을 없애고 진행
temp = [temp[1]]
else: #빗물이 고이는 부분을 2로 적고 count 올림
for t in range(temp[0] + 1, temp[1]):
m[h1][t] = 2
count += 1
temp = [temp[1]]
temp = []
print(count)
'Algorithm study' 카테고리의 다른 글
[백준 1260 / Python(파이썬)] DFS와 BFS (0) | 2022.10.04 |
---|---|
[백준 1197 / Python(파이썬)] 최소 스패닝 트리 (0) | 2022.07.29 |
[백준 1700 / 파이썬(Python)] 멀티탭 스케줄링 (0) | 2022.07.28 |
CH 06. 스택(Stack) (0) | 2022.03.24 |
Ch 05. 큐(Queue) (0) | 2022.03.24 |