Animated Rainbow Nyan Cat
본문 바로가기
Algorithm study

[백준 14179/파이썬(Python)] 빗물

by SOBONA 2022. 7. 18.

[백준 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)