https://programmers.co.kr/learn/courses/30/lessons/92342
import copy
info = []
currArrow = [0] * 11
maxArrow = [-1]
maxDiff = float("-inf")
def solution(n, infoo):
global info
info = infoo
updateArrow(0, n)
if maxDiff == float('-inf'):
return [-1]
maxrow = maxArrow[0]
for i in range(1, len(maxArrow)):
currrow = maxArrow[i]
for j in range(10,-1,-1):
if maxrow[j] == currrow[j]:
pass
if maxrow[j] < currrow[j]:
maxrow = currrow
break
if maxrow[j] > currrow[j]:
break
return maxrow
def updateArrow(i, remains):
global maxArrow, maxDiff
if i == 11:
diff = getDiff()
if diff <= 0:
return
if maxDiff < diff:
maxDiff = diff
maxArrow = [copy.deepcopy(currArrow)]
elif maxDiff == diff:
maxArrow.append(copy.deepcopy(currArrow))
return
if i == 10: # 0점
currArrow[10] = remains
updateArrow(11, 0)
currArrow[10] = 0
elif remains > info[i]: # 가능할때
currArrow[i] = info[i] + 1
updateArrow(i+1, remains - (info[i]+1)) # 쏘거나
currArrow[i] = 0
updateArrow(i+1, remains) # 안쏘거나
else: # 불가능할때
updateArrow(i+1, remains) # 안쏘거나
def getDiff():
score1 = 0
score2 = 0
for i in range(11):
if info[i] == 0 and currArrow[i] == 0:
continue
# 어피치 < 라이언
if info[i] < currArrow[i]:
score2 += (10-i)
# 어피치 >= 라이언
else:
score1 += (10-i)
diff = score2 - score1
return diff