[백준|파이썬] 14719: 빗물 (골드5)

2023. 5. 4. 23:57·Problem Solving/백준
문제

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

 

14719번: 빗물

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

www.acmicpc.net

 

 

🐍파이썬
import sys
input=sys.stdin.readline

answer = 0
h, w = map(int, input().split())    #2차원 세로 h, 2차원 가로 w
arr = list(map(int, input().split()))   #블록이 쌓인 높이
for i in range(1, len(arr)-1):
    left_max = max(arr[:i+1])
    right_max = max(arr[i+1:])
    total_min = min(left_max, right_max)
    
    if total_min > arr[i]:
        answer += total_min - arr[i]
        
print(answer)

💡 풀이과정

  1. 빗물이 고이려면 블럭 i의 양쪽 블럭의 높이가 i보다 높아야 한다.
  2. for루프를 돌면서 각 블럭의 이전 블럭들 중 가장 높은 블럭, 다음 블럭들 중 가장 높은 블럭을 구한다.
  3. 이때 빗물은 두 블럭 중 더 작은 높이의 블럭만큼 고일 수 있기 때문에, min(left_max, right_max)에서 현재 블럭의 높이를 빼주어 이번 블럭에서 고일 빗물의 높이를 구해준다. 
  4. 첫 번째와 마지막 블럭에는 빗물이 고일 수 없기 때문에 for 루프를 돌 리스트의 범위는 range(1, len(arr)-1) 이다.

 

다른 풀이 방법

_, _ = map(int, input().split())	#h, w가 쓰일 일이 없으므로 변수 할당x
walls = list(map(int, input().split()))

stack = []
answer = 0

for i, h in enumerate(walls):
    while stack and walls[stack[-1]] < h:
        b = walls[stack.pop()]
        if not stack:
            break
        d = i - stack[-1] - 1
        wh = min(walls[stack[-1]], h) - b
        answer += d * wh
    stack.append(i)

print(answer)

👇 풀이방법 참고 블로그

https://kimmeh1.tistory.com/261?category=926574 

 

[백준 14719] 빗물

문제 2차원 세계에 블록이 쌓여있다. 비가 오면 블록 사이에 빗물이 고인다. 비는 충분히 많이 온다. 고이는 빗물의 총량은 얼마일까? 입력 첫 번째 줄에는 2차원 세계의 세로 길이 H과 2차원 세계

kimmeh1.tistory.com

 

저작자표시 비영리 변경금지 (새창열림)

'Problem Solving > 백준' 카테고리의 다른 글

[백준|파이썬] 1138: 한 줄로 서기 (실버2)  (0) 2023.06.24
[백준|파이썬] 16506: CPU (실버5)  (0) 2023.05.06
[백준|파이썬] 3568: iSharp (실버5)  (0) 2023.05.05
[백준|파이썬] 7568: 덩치 (실버5)  (2) 2023.04.30
[백준|파이썬] 4673: 셀프 넘버 (실버5)  (0) 2023.04.29
[백준|파이썬] 9655: 돌 게임 (실버5)  (0) 2023.04.28
'Problem Solving/백준' 카테고리의 다른 글
  • [백준|파이썬] 16506: CPU (실버5)
  • [백준|파이썬] 3568: iSharp (실버5)
  • [백준|파이썬] 7568: 덩치 (실버5)
  • [백준|파이썬] 4673: 셀프 넘버 (실버5)
청량리 물냉면
청량리 물냉면
프로그래밍 공부를 하고 있습니다. 공부 내용 정리 겸 정보 공유를 목적으로 합니다.
  • 청량리 물냉면
    노력중인 블로그
    청량리 물냉면
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 프로그래밍
        • Programming
        • C | C++
        • Java
        • Python
      • 웹 프로그래밍
        • HTML | CSS
        • JavaScript | TypeScript
        • React
        • Vue.js
        • Next.js
        • Spring & Spring Boot
        • JSP & Servlet
        • DB
      • 웹 프로젝트
        • 웹 프로젝트
        • 🥨스낵몰
        • 👨‍👨‍👧‍👧소셜 가계부
        • 🌜꿈 일기장
        • 🔮포트폴리오 사이트
        • 🏃‍♂️팀 프로젝트: 일정관리 프로그램
        • 📈팀 프로젝트: AI기반 주식 분석 플랫폼
        • 😺Just Meow It: 고양이의 조언
      • 앱 프로그래밍
        • Flutter
        • Kotlin
      • Problem Solving
        • 백준
        • 프로그래머스
        • SWEA
      • Computer Science
        • 알고리즘
        • 컴퓨터 네트워크
        • 이산수학
      • Developer
        • 후기
        • 자료정리
        • 취업 | 취준
        • 웹개발 교육 프로그램
        • TIL
  • 블로그 메뉴

    • 홈
    • Github
  • 공지사항

    • 프로그래밍 공부 중😊
  • 인기 글

  • 태그

    알고리즘
    블로그 제작
    강의내용정리
    플러터
    백준
    구현
    AWS
    타입스크립트
    spring boot
    웹사이트
    리액트
    mysql
    자바
    뉴렉처
    프로그래머스
    Til
    파이썬
    Jiraynor Programming
    프로젝트
    d3
    bfs
    클론 프로젝트
    컴퓨터네트워크
    공식문서
    자바스크립트
    ZeroCho
    Next.js
    포트폴리오
    SWEA
    React
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
청량리 물냉면
[백준|파이썬] 14719: 빗물 (골드5)
상단으로

티스토리툴바