이번 문제는 백트레킹을 통해 해결하였다. 가능한 결과값을 백트레킹을 통하여 모두 구한 후에 그 중에서 가장 큰 값을 출력하도록 하였다. 방문 처리는 해당 포지션이 선발된 것과 같은 의미로 사용되었기 때문에 1차원 리스트로 구현하였다. 모든 포지션이 선발되게 되면 idx가 11이 되므로, 이 경우에 결과값을 모아놓는 리스트에 결과값을 담았다.
selected[i]
가 True일 경우, 다음 반복으로 넘어간다.players[idx][i]
가 0이 아닐 경우,selected[i]
를 True로 갱신한다.dfs(idx+1, total+players[idx][i])
를 재귀호출한다.selected[i]
를 False로 갱신한다.dfs(0, 0)
을 호출한다.t=int(input())
for _ in range(t):
players = []
for _ in range(11):
players.append(list(map(int, input().split())))
selected=[False for _ in range(11)]
results=[]
def dfs(idx, total):
if idx==11:
results.append(total)
return
for i in range(11):
if selected[i]:
continue
if players[idx][i]:
selected[i] = True
dfs(idx+1, total+players[idx][i])
selected[i] = False
dfs(0, 0)
print(max(results))