문제 링크

문제 설명

예시

[input]
4
1 2 2 1

[output]
2

[input]
5
3 1 2 3 1

[output]
5

[input]
8
4 23 75 0 23 96 50 100

[output]
221

사고의 흐름

모범답안

1. 여기를 누르면 답이 보입니다
def split(arr):
  startIndex = 0
  n = len(arr)
  endIndex = n-i
  indexes = []
  for i in range(n):
    endIndex = n-1
    if arr[startIndex] == 0:
      startIndex += 1
      continue
    if arr[i] == 0:
      endIndex = i-1
      indexes.append((startIndex, endIndex))
      startIndex = i+1
  if arr[-1] != 0:
    indexes.append((startIndex, n-1))
  return indexes


def counting(arr):
  count = 0
  indexes = split(arr)
  for i in range(len(indexes)):
    si, ei = indexes[i]
    splitedArr = arr[si:ei+1]
    _min = min(splitedArr)
    for i in range(len(splitedArr)):
      splitedArr[i] -= _min
    count += _min
    if max(splitedArr) > 0:
      count += counting(splitedArr)
  return count


def answer(arr):
  return counting(arr)

arr = list(map(int, input().split()))
print(answer(arr))
2. 여기를 누르면 답이 보입니다