모든 글

백준 1041번 주사위

목차 3개 섹션

백준 1041번: 주사위

아이디어

주사위 전개도 모양이 다음과 같을 때 A를 중심으로 위 D, 아래 C, 왼쪽 E, 오른쪽 B와 F가 이어진 주사위 전개도

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

쌓은 주사위의 위치에 따라 밖으로 보이는 면의 수를 1, 2, 3으로 표시한 입체도

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

코드

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)

주의점

주사위 수가 큰 경우의 입력과 큰 정수로 출력되는 정답 예시

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

백준 1041번 주사위 온라인 채점 제출 결과

댓글 보기 · 쓰기

GitHub에서 댓글 보기