problems
수가 최대 6개니까 하나하나 풀다보면 백트래킹으로 가능하지 않을까 생각했다.
MAX_TIME
으로 지정했다.수치를 올릴때마다 최대 8개의 경우의 수로 갈라진다.
모든 문제를 풀 수 있을 때까지 수치를 올리려면 가장 높은 요구량을 채울 때까지 반복해야한다.
그 요구량이 R이라 치면 아마도 O(8^R) ⇒ 당연히 시간 초과
백트래킹을 고려할 때는 몇 개의 분기가 만들어지고 최대 몇 번 실행되는지를 생각해야겠다고 느꼈다.
IndexError
방지IndexError
를 어떻게 처리할지 고민했다. ⇒ 위의 방식대로 해결def solution(alp, cop, problems):
MAX_ALP = max(map(lambda x: x[0], problems))
MAX_COP = max(map(lambda x: x[1], problems))
alp = min(alp, MAX_ALP)
cop = min(cop, MAX_COP)
dp = [[max(0, a - alp) + max(0, c - cop) for c in range(MAX_COP + 1)] for a in range(MAX_ALP + 1)]
for a in range(alp, MAX_ALP + 1):
for c in range(cop, MAX_COP + 1):
for problem in problems:
if a >= problem[0] and c >= problem[1]:
a_next, c_next = min(MAX_ALP, a + problem[2]), min(MAX_COP, c + problem[3])
dp[a_next][c_next] = min(dp[a_next][c_next], dp[a][c] + problem[4])
return dp[MAX_ALP][MAX_COP]