본문 바로가기
프로그래밍/알고리즘

[BOJ][Python] 14719번 - 빗물 [시뮬레이션 기본 - 골드 5티어]

by 우주를놀라게하자 2022. 3. 10.
반응형
SMALL

알고리즘 태그

[시뮬레이션 기본]

태그 설명

시뮬레이션이란?

 

알고리즘을 풀 때 모든 과정이 제시되어 그 과정을 거쳐 나온 결과를 추론하는 문제입니다.

시뮬레이션은 설명해 준 대로 쭉 이행하면 됩니다.

문제

백준 14719문제 - 빗물

링크: 백준 14719

문제설명

특정 위치에 물이 고이는지 고이지 않는지를 판단한 후 이를 코드로 옮겨주면 된다.
그렇다면 어떻게 특정 위치에 물이 고이는지 안고이는지를 판단할 수 있을까???

📃 소스코드 및 설명

# 투포인터 방식으로 양쪽끝을 기준으로 서로 비교해가면서 푸는 방식으로 접근

# ex) 4 4
h, w = map(int, input().split())

# ex) 3 0 1 4
block_height = list(map(int, input().split()))

left_point, right_point = 0, w-1

# 가장 첫번쨰 점을 기준으로 시작[맨 왼쪽]
max_left = block_height[left_point]

# 가장 끝점을 기준으로 시작[맨 오른쪽]
max_right = block_height[right_point]

result = 0

# 왼쪽기준과 오른쪽 기준이 같아질때까지
while left_point < right_point:
  """
  1. max_left = max(3, 3)
  2. max_left = max(3, 0)
  3. max_left = max(3, 1)
  4. break Point
  """
  
  max_left = max(max_left, block_height[left_point])
  """
  1. max_right = max(4, 4)
  """
  max_right = max(max_right, block_height[right_point])

  # 비교!
  if max_left >= max_right:
    result += max_right - block_height[right_point]
    right_point -= 1
    
  if max_left < max_right:
    result += max_left - block_height[left_point]
    left_point += 1
    
  print(result)
반응형
LIST