풀이
n이 4인 경우를 보겠습니다.
4×4×4 크기의 정육면체입니다.
빨간색 부분은 3면이 보이는 주사위이고, 파란색 부분은 2면, 초록색 부분은 단 1면만 보입니다.
빨간색 부분은 정육면체의 크기에 상관없이 항상 4개 존재하고,
파란색 부분은 제일 꼭대기에 4 * (n - 2) → 8개와 그 밑으로 4 * (n - 1) → 12개가 존재합니다.
초록색 부분은 제일 꼭대기에 (n - 2) * (n - 2) → 4개와 그 밑으로 4 * (n - 2) * (n - 1) → 24개가 존재합니다.
유의해야 할 점이 있는데 해당 정육면체에서 자신과 마주 보는 면은 보일 수 없습니다.
최대 3면만 보이기 때문에 마주 보는 3면은 가려져 있습니다.
n이 1일 경우는 예외인데, 아랫면을 제외한 5면이 보입니다.
#include<iostream>
#include<algorithm>
using namespace std;
using LL = long long;
int main(void)
{
LL n; cin >> n;
int dice[6];
for (int i = 0; i < 6; i++) {
cin >> dice[i];
}
if (n == 1) {
LL res = 0;
sort(dice, dice + 6);
for (int i = 0; i < 5; i++) {
res += dice[i];
}
cout << res;
}
else {
LL v[3];
v[0] = min(dice[0], dice[5]);
v[1] = min(dice[1], dice[4]);
v[2] = min(dice[2], dice[3]);
sort(v, v + 3);
LL one = v[0];
LL two = one + v[1];
LL three = two + v[2];
LL res = 0;
res += three * 4;
res += (two * 4 * (n - 1)) + (two * 4 * (n - 2));
res += (one * 4 * (n - 2) * (n - 1)) + (one * (n - 2) * (n - 2));
cout << res;
}
return 0;
}
반례
Input
5
1 1 1 1 1 1
Output
125
Input
10
50 39 25 14 48 7
Output
4132
Input
1000000
1 2 3 4 5 6
Output
5000008000000
'알고리즘 > 백준' 카테고리의 다른 글
[백준/C,C++] 10610번: 30 (0) | 2021.04.20 |
---|---|
[백준/C,C++] 2875번: 대회 or 인턴 (0) | 2021.04.20 |
[백준/C,C++] 1059번: 좋은 구간 (2) | 2021.04.20 |
[백준/C,C++] 11726번: 2×n 타일링 (0) | 2021.04.20 |
[백준/C,C++] 9095번: 1, 2, 3 더하기 (0) | 2021.04.20 |
댓글