[백준] 1041번 주사위

거북이·2023년 7월 4일
0

백준[골드5]

목록 보기
55/82
post-thumbnail

💡문제접근

  • 여러 개의 주사위를 쌓을 때 보이는 5개의 면에 쓰여 있는 수의 합이 최소가 되려면 큐브처럼 가로, 세로, 높이를 늘려가면서 쌓으면 된다.

#1. N = 1 → 바닥면에 있는 숫자가 가장 큰 수면 보이는 5개의 면에 쓰여 있는 수의 합은 최소


N ≥ 2인 경우부터는 보이는 면의 개수를 1 ~ 3개로 나누어 구하면 해결할 수 있다.
#2. N = 2
①. 보이는 면의 개수 1개 : 0개
②. 보이는 면의 개수 2개 : 4개
③. 보이는 면의 개수 3개 : 4개

#3. N = 3
cf. 보이는 면의 개수 0개 : 2개
①. 보이는 면의 개수 1개 : 9개
②. 보이는 면의 개수 2개 : 12개
③. 보이는 면의 개수 3개 : 4개
....


식을 세워보면 다음과 같다.
1. 보이는 면의 개수 1개 : 4 × (N-1) × (N-2) + (N-2)^2
2. 보이는 면의 개수 2개 : 4 × (N-1)
3. 보이는 면의 개수 3개 : 4

💡코드(메모리 : 31256KB, 시간 : 40ms)

import sys
input = sys.stdin.readline

N = int(input())
number = list(map(int, input().strip().split()))

# 1면만 보이는 사각형의 개수
side_1 = 4 * (N-1) * (N-2) + (N-2)**2

# 2면만 보이는 사각형의 개수
side_2 = 4 * (N-1) + 4 * (N-2)

# 3면만 보이는 사각형의 개수
side_3 = 4

Sum = []
result = 0
if N == 1:
    number.sort()
    for i in range(5):
        result += number[i]
    print(result)
else:
    Sum.append(min(number[0], number[5]))
    Sum.append(min(number[1], number[4]))
    Sum.append(min(number[2], number[3]))
    Sum.sort()

    side_1_sum = Sum[0]
    side_2_sum = Sum[0] + Sum[1]
    side_3_sum = Sum[0] + Sum[1] + Sum[2]

    print(side_1_sum * side_1 + side_2_sum * side_2 + side_3_sum * side_3)

💡소요시간 : 29m

0개의 댓글