이번 문제는 구현 문제로, 각 상황에서의 주사위들의 위와 아래를 결정하고 측면들 중 가장 큰 값들의 합을 구하는 방식으로 접근하였다. 1번 주사위의 위쪽면을 결정하고, 그 이후의 주사위들을 이전 주사위의 위쪽면을 보고 주사위들의 아래쪽면을 결정하였다. 아래쪽면을 결정하면, 위쪽면의 인덱스까지 찾아 두 인덱스를 제외한 나머지 면들 중 최댓값을 결과 변수에 계속해서 더하는 방식으로 해결할 수 있었다.
n = int(input())
dices = [list(map(int, input().split())) for _ in range(n)]
# a-f b-d c-e -> 0-5 1-3 2-4
mapping = [5, 3, 4, 1, 2, 0]
answer = 0
def find_cur_top_idx(cur, before_top):
cur_bottom_idx = dices[cur].index(before_top)
return mapping[cur_bottom_idx]
def dice_stacking(idx):
result = 0
cur_max = 0
cur_top = dices[0][idx]
for i in range(6):
if i == idx or i == mapping[idx]:
continue
cur_max = max(cur_max, dices[0][i])
result += cur_max
for i in range(1, n):
cur_max = 0
idx = find_cur_top_idx(i, cur_top)
cur_top = dices[i][idx]
for j in range(6):
if j == idx or j == mapping[idx]:
continue
cur_max = max(dices[i][j], cur_max)
result += cur_max
return result
for i in range(6):
answer = max(answer, dice_stacking(i))
print(answer)