본문 바로가기

Algorithm/BOJ

[BOJ] 14719. 빗물

https://www.acmicpc.net/problem/14719

 

14719번: 빗물

첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계의 가로 길이 W가 주어진다. (1 ≤ H, W ≤ 500) 두 번째 줄에는 블록이 쌓인 높이를 의미하는 0이상 H이하의 정수가 2차원 세계의 맨 왼쪽 위치

www.acmicpc.net

 

 

1. 해결방법

"""
1. 아이디어
- 세로 H와 가로 W를 입력받아 2차원 배열을 만든다.
- 특정 위치를 기준으로 양 옆에 자신보다 작은 높이의 블록이 있다면 물이 고일 수 없다.
- 특정 위치에서 왼쪽에서 가장 큰 블록과 오른쪽에서 가장 큰 블록중에서 비교한다.
- 왼쪽, 오른쪽에서 가장 큰 블록을 비교해서 둘 중 작은 블록을 구한다.
- 만약 구한 블록 값이 해당 위치의 블록 값보다 크다면, 구한 블록에서 해당 위치의 블록을 빼주면 해당 위치에서의 고인 물 양이 된다.
"""

 

 

2. 정답코드

import sys
input = sys.stdin.readline

H, W = map(int, input().split())
graph = list(map(int, input().split()))

def main():
    result = 0

    for i in range(1, W - 1):
        left_max = max(graph[:i])
        right_max = max(graph[i + 1:])

        value_min = min(left_max, right_max)
        if value_min > graph[i]:
            result += value_min - graph[i]

    return result


print(main())

 

역시나 아이디어를 코드로 옮기지는 못했다.
특히나 고인 빗물의 양을 구하는 방식을 잘못 구해버려서 어리둥절했다. 
그리고, 파이썬 리스트 문법도 부족했던 것 같다. [:i], [i + 1:]이 부분도 역시 알아둬야겠다.

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 3273. 두 수의 합  (0) 2022.09.01
[BOJ] 2559. 수열  (0) 2022.09.01
[BOJ] 17144. 미세먼지 안녕!  (0) 2022.08.04
[BOJ] 16234. 인구 이동  (0) 2022.07.18
[BOJ] 14891. 톱니바퀴  (0) 2022.07.16