https://www.acmicpc.net/problem/1041
주사위 전개도
D EABF C
일 때 가능한 2면은 마주보는 것 제외 전부 다 가능 (A,F),(D,C),(B,E) <- 불가능
3면은 (A,D,E),(A,C,E),(A,B,D),(A,B,C),(F,D,E),(F,C,E),(F,B,D),(F,B,C) <- 가능
쌓았을 때 꼭짓점 = 3면의 합이 제일 적은 주사위 면 모서리 = 2면의 합이 제일 적은 주사위 면 꼭짓점, 모서리 제외 부분 = 제일 작은 면 일 때가 합의 최소
개수들은 다 귀납적으로 일반식을 구할 수 있었다
꼭짓점(3면이 보이는 주사위)의 개수는 N = 1 꼭짓점 1개 N = 2 꼭짓점 4개 N = 3 꼭짓점 4개
즉 2개 이상일 때는 꼭짓점 4개 고정
면(1면이 보이는 주사위)의 개수는 N = 1 면 0개 N = 2 면 0개 N = 3 4(면의 개수) X 2(주사위 개수) + 1(면의 개수) X 1(주사위 개수) N = 4 4 X (2^2+2) 1 X 2^2 N = 5 4 X (3^2 + 3) + 3^3
= 4 X ((n-2)^2 + (n-2)) + (n-2)^2 = 5(n-2)^2 + 4(n-2)
모서리(2면이 보이는 주사위)의 개수는 N = 1 면 0개 N = 2 면 4개 N = 3 4 X 2 + 4 X 1 N = 4 4 X 3 + 4 X 2 = 4 X (n-1) + 4 X (n-2)
꼭짓점 개수 X 3면 합의 최소 + 모서리 개수 X 2면 합의 최소 + 면 개수 X 1면 합의 최소 = 답
N이 1일 때는 좀 예외 눈치가 없어서 주사위의 가장 큰 부분을 안 보이게 가리면 답
어렵지 않게 풀 수 있었다
n = int(input())
dice = list(map(int, input().split()))
answer = 0
if n == 1:
answer = sum(dice) - max(dice)
print(answer)
else:
# 면 개수
count = ((n - 2) ** 2) * 5 + 4 * (n - 2)
answer += min(dice) * count
# 모서리 개수
count = (n-2)*4 + (n-1)*4
# 2면의 최소 합 구하기
impossible = [(0, 5), (5, 0), (1, 4), (4, 1), (2, 3), (3, 2)]
temp = []
for i in range(6):
for j in range(6):
if i != j and (i, j) not in impossible:
temp.append(dice[i] + dice[j])
minVal = min(temp)
# 모서리 개수 * 2면의 최소 값
answer += count * minVal
# 꼭짓점의 수는 4
# 3면의 최소 합 구하기
possible = [(0, 3, 4), (0, 2, 4), (0, 1, 3), (0, 1, 2), (5, 3, 4), (5, 2, 4), (5, 1, 3), (5, 1, 2)]
temp = []
for i in possible:
a, b, c = i
temp.append(dice[a] + dice[b] + dice[c])
minVal = min(temp)
# 꼭짓점 개수 * 3면의 최소 값
answer += minVal * 4
print(answer)