Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 시뮬레이션
- 백트래킹
- 플로이드-워셜
- 다이나믹프로그래밍
- 에라토스테네스의 체
- 트리
- 그래프 이론
- 그리디
- 그래프 탐색
- BFS
- join
- 재귀
- 다이나믹 프로그래밍
- 브루트포스
- 수학
- DFS
- MST
- 해시
- 구현
- 다시
- 누적합
- 자료구조
- GROUP BY
- 분할정복
- DP
- 우선순위큐
- 다익스트라
- 서브쿼리
- 크루스칼
- 투포인터
Archives
- Today
- Total
기록하고 까먹지 말기
14719 본문
날짜 : 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가 발생해 그 지점에서 고민을 했다.
참고 사이트
-