기록하고 까먹지 말기

14719 본문

전공/백준

14719

yha97 2023. 3. 15. 15:49

날짜 : 2023. 03. 15

사용 언어 : python

 

문제

 

 

코드

import sys
h, w = map(int, sys.stdin.readline().split())
graph = [[0] * w for _ in range(h)]
walls = list(map(int, sys.stdin.readline().split()))  # 벽
#print(graph)

# 벽 생성
for c in range(w):
    for r in range(h-1, (h-1) - walls[c], -1):
        graph[r][c] = 1


"""for i in graph:
    print(i)
print()"""

i = (h-1)
while i >= 0:
    s, e = -1, -1
    for j in range(w):
        if graph[i][j] == 1:  # 벽
            e = j  # end 설정
            if s >= 0:
                for a in range(s + 1, e):
                    graph[i][a] = 2  # 빗물 채우기
            s = j  # 시작지점 설정
    i -= 1

"""for i in graph:
    print(i)"""
res = 0
for r in range(h):
    for c in range(w):
       if graph[r][c] == 2: res += 1
print(res)

 

 

풀이

- 벽을 입력받은 후 이중 for 문을 이용해 벽을 구현한다. (행 -> 열 순서가 아닌 열 -> 행 순서로 벽을 구현)

- 이후 각 행마다 벽을 만날 때 start, end 지점을 포착하여 for문을 통해 물을 채운다.

- 벽을 만나면 그 벽을 end 지점으로 설정한 후 for문을 실행하되, start 지점이 사전에 지정되어야 한다.

- 그리고 빗물이 채워진 개수를 구한 후 정답을 출력한다.

 

 

알게된 점

- 문제 해결의 발상은 빠르게 나왔지만 벽을 구현하는데 있어서 계속 index error가 발생해 그 지점에서 고민을 했다.

 

 

참고 사이트

 

'전공 > 백준' 카테고리의 다른 글

1699  (0) 2023.03.18
13549  (0) 2023.03.16
1967  (0) 2023.03.14
1504  (0) 2023.03.13
1916  (0) 2023.03.13