Back to posts
1 min read

백준 1041번 주사위

On this page

백준 1041번: 주사위

아이디어

주사위 전개도 모양이 다음과 같을 때 백준 1041번 주사위-1-65bfb3c645.png

마주보는 면은 AF, BE, CD이다. A~F0~5로 대응시킨 후 마주보는 면이 없는 조합을 만든다. 마주보는 면이 동시에 보이는 일은 없기 때문.

백준 1041번 주사위-2-11be93b27f.png

만든 조합으로 합이 가장 작은 경우를 구하고, 규칙에 맞게 더해주면 된다.

코드

import itertools

N = int(input())
numList = list(map(int, input().split()))

#except 05 14 23

list3 = [(0, 1, 2), (0, 1, 3), (0, 2, 4), (0, 3, 4), (1, 2, 5), (1, 3, 5), (2, 4, 5), (3, 4, 5)]
oldList2 = list(itertools.combinations(range(6), 2))
deleteSet2 = {(0, 5), (1, 4), (2, 3)}
list2 = [i for i in oldList2 if i not in deleteSet2]

min1 = min(numList)
min2 = 100
min3 = 150
for i in list2:
    tmp = numList[i[0]] + numList[i[1]]
    min2 = min(min2, tmp)
for i in list3:
    tmp = numList[i[0]] + numList[i[1]] + numList[i[2]]
    min3 = min(min3, tmp)

if N == 1:
    print(sum(numList) - max(numList))

else: #N^2층: 3면 4개, 2면 (N-2)*4개, 1면 (N-2)^2개, 나머지층: 2면 4개, 1면 (N-2)*4개
    ans = min3*4 + min2*(N - 2)*4 + min1*(N - 2)**2 + (N - 1)*(min2*4 + min1*(N - 2)*4)
    print(ans)

주의점

백준 1041번 주사위-3-4fe0327a83.png

int 자료형을 사용할 수 없다.

백준 1041번 주사위-4-e02fe3e937.png