전공/백준
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가 발생해 그 지점에서 고민을 했다.
참고 사이트
-