-
[백준] 14719번 빗물 (by Python)Programming/Algorithm 2021. 3. 26. 01:32
문제
https://www.acmicpc.net/problem/14719
풀이
h, w = map(int, input().split()) block = [[False] * w for _ in range(h)] height = list(map(int, input().split())) for i, ht in enumerate(height): for j in range(ht): block[j][i] = True i, count = 0, 0 ans = 0 start, end = False, False while not (start and end): temp = 0 count = 0 for j in range(1, w): if temp == 0 and block[i][j - 1] and not block[i][j]: temp = 1 elif temp != 0 and not block[i][j]: temp += 1 elif temp > 0 and block[i][j]: count += temp temp = 0 if not start and count > 0: start = True if start and count == 0: end = True ans += count i += 1 if i == h: break print(ans)
구현 문제이다. 주어진 h, w로 2차원 리스트를 만들고 블록이 채워져있는 부분을 True, 아닌 부분을 False로 주어 2차원 세계를 구현하였다. 아래 row부터 따져나가길 시작하며, 각 row에서 양쪽에 block이 있는 공간만을 세어 count에 더한다. 이 때, count가 0이 되는 것을 기준으로 loop을 종료시키는데 아래 row에서 모든 block이 꽉 차있어 count가 0인 경우도 있으므로, 처음 0보다 큰 count가 발생했을 때 시작했다는 것을 표시한다. 그리고 시작이 된 후에 count가 0일 경우 종료시키도록 구현하였다.
'Programming > Algorithm' 카테고리의 다른 글
[백준] 2293번 동전 1 (by Python) (0) 2021.03.31 [백준] 1806번 부분합 (by Python) (0) 2021.03.26 [백준] 1786번 찾기 (by Python) (0) 2021.03.24 [백준] 1062번 가르침 (by Python) (0) 2021.03.24 [백준] 18404번 현명한 나이트 (by Python) (0) 2021.03.14