BOJ) 2116번 주사위 스택

  • by


문제

  • 맨 아래 주사위의 밑면을 지정하여 반복문을 실행 -> 즉 6회의 반복문을 실행
  • 맨 아래 주사위의 상면도 알 수 있으므로 나머지 주사위도 똑같이 달릴 수 있습니다.

  • 주사위마다 위, 아래를 제외한 측면 중 가장 큰 값을 계속해서 더해준 6회의 반복문에서 최대값을 출력

코드

def top(n, a):
    arr = (n(5), n(3), n(4), n(1), n(2), n(0))   # A <-> F, B <-> D , C <-> E
    return arr(a)


num = int(input())
dice = (list(map(int, input().split())) for _ in range(num))

max_dice = ()

for i in dice(0):
    first = dice(0)(:)                      # 배열의 원소를 제거해야 해서 리스트 복사
    side_sum = 0
    top_num = top(first, first.index(i))    
    first.remove(i)
    first.remove(top_num)
    side_sum += max(first)                  # 옆면중 가장 큰값을 더해줌

    for j in range(1, num):
        lst = dice(j)(:)
        bottom_num = top_num
        top_num = top(lst, lst.index(top_num))
        lst.remove(bottom_num)
        lst.remove(top_num)
        side_sum += max(lst)

    max_dice.append(side_sum)               # max_dice 리스트에 추가시켜줌

print(max(max_dice))