이번 문제는 permutations를 이용하여 해결하였다. 1번 선수는 무조건 4번 타자가 되어야 하므로 1부터 8까지의 수의 permutations를 구하고, 4번째 자리에 1번 선수를 넣어주었다. 그리고 이닝을 진행하며 타자의 번호를 cur 변수로 기억하고 아웃카운트를 세며 반복을 진행하였다. 이 탐색을 permutations의 모든 원소에 대하여 진행하여 그 중 가장 큰 값을 취하도록 하였다. 처음에는 deque()에 주자를 넣는 방식으로 구현하였는데, 시간초과가 발생하였고, 각각의 베이스를 변수로 관리하여 이를 해결하였다.
from itertools import permutations
import sys
input = sys.stdin.readline
n = int(input())
hitter = [list(map(int, input().split())) for _ in range(n)]
answer = 0
def get_point(line_up):
global answer
cur = 0
point = 0
for inning in hitter:
out = 0
b1, b2, b3 = 0, 0, 0
while out < 3:
if inning[line_up[cur]] == 0:
out += 1
elif inning[line_up[cur]] == 1:
point += b3
b1, b2, b3 = 1, b1, b2
elif inning[line_up[cur]] == 2:
point += b2+b3
b1, b2, b3 = 0, 1, b1
elif inning[line_up[cur]] == 3:
point += b1+b2+b3
b1, b2, b3 = 0, 0, 1
else:
point += b1+b2+b3+1
b1, b2, b3 = 0, 0, 0
cur = (cur+1)%9
return point
for line_up in list(permutations(range(1, 9), 8)):
line_up = list(line_up[:3]) + [0] + list(line_up[3:])
answer = max(answer, get_point(line_up))
print(answer)