Lv3 프로그래머스(Programmers)[Python][파이썬] 에어컨

"""
출처:프로그래머스,
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])