"""
출처:프로그래머스,
https://school.programmers.co.kr/learn/courses/30/lessons/214289
"""
# 풀이 과정
def solution(temperature, t1, t2, a, b, onboard):
t = temperature
p = onboard
max_t, min_t = t2, t1
dp = [[1e9] * 51 for _ in range(1001)]
dp[0][t + 10] = 0
count = sum(p)
for i in range(1, len(onboard)): # i 시간
if p[i] == 1:
start = t1
end = t2 + 1
else:
start = -10
end = 40 + 1
for j in range(start, end):
if j == t:
check = [dp[i - 1][j + 10]]
if j + 10 != 0:
check.append(dp[i - 1][j - 1 + 10])
if j + 10 != 50:
check.append(dp[i - 1][j + 1 + 10])
dp[i][j + 10] = min(check)
elif j > t:
check = [dp[i - 1][j + 10] + b]
if j + 10 != 0:
check.append(dp[i - 1][j + 10 - 1] + a)
if j + 10 != 50:
check.append(dp[i - 1][j + 10 + 1])
dp[i][j + 10] = min(check)
else:
check = [dp[i - 1][j + 10] + b]
if j + 10 != 0:
check.append(dp[i - 1][j + 10 - 1])
if j + 10 != 50:
check.append(dp[i - 1][j + 10 + 1] + a)
dp[i][j + 10] = min(check)
if p[i] == 1:
count -= 1
if count == 0:
last = i
return min(dp[last])
# return min(dp[len(p)-1])