1041 주사위

정민용·2023년 4월 22일

백준

목록 보기
142/286

문제

주사위는 위와 같이 생겼다. 주사위의 여섯 면에는 수가 쓰여 있다. 위의 전개도를 수가 밖으로 나오게 접는다.

A, B, C, D, E, F에 쓰여 있는 수가 주어진다.

지민이는 현재 동일한 주사위를 N3개 가지고 있다. 이 주사위를 적절히 회전시키고 쌓아서, N×N×N크기의 정육면체를 만들려고 한다. 이 정육면체는 탁자위에 있으므로, 5개의 면만 보인다.

N과 주사위에 쓰여 있는 수가 주어질 때, 보이는 5개의 면에 쓰여 있는 수의 합의 최솟값을 출력하는 프로그램을 작성하시오.

# 1041
import sys
input = lambda: sys.stdin.readline().strip()

# n > 1 인 경우 (n == 1 -> 5)
# 1 * ((n-2) * (n-1) * 4 + (n-2) ** 2)
# 2 * ((n-1) * 4 + (n-2) * 4)
# 3 * 4

n = int(input())
dice = list(map(int, input().split()))

if n == 1:
    print(sum(dice) - max(dice))
    exit(0)

# 1 조합
com1 = min(dice)

# 2 조합
com2 = 3000000
not_com2 = [[0, 5], [1, 4], [2, 3]]
for i in range(6):
    for j in range(i+1, 6):
        if [i, j] in not_com2:
            continue
        com2 = min(com2, dice[i] + dice[j])

# 3 조합
com3 = 3000000
com3_list = [[0, 1, 2], [0, 1, 3], [0, 2, 4], [0, 3, 4], [1, 2, 5], [1, 3, 5], [2, 4, 5], [3, 4, 5]]
for a in range(6):
    for b in range(a+1, 6):
        for c in range(b+1, 6):
            if [a, b, c] in com3_list:
                com3 = min(com3, dice[a] + dice[b] + dice[c])
            
total = com1 * ((n-2) * (n-1) * 4 + (n-2) ** 2) + com2 * ((n-1) * 4 + (n-2) * 4) + com3 * 4
print(total)

백준 1041 주사위

0개의 댓글