1041번: 주사위
첫째 줄에 N이 주어진다. 둘째 줄에 주사위에 쓰여 있는 수가 주어진다. 위의 그림에서 A, B, C, D, E, F에 쓰여 있는 수가 차례대로 주어진다. N은 1,000,000보다 작거나 같은 자연수이고, 쓰여 있는 수
www.acmicpc.net
풀이
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 |
댓글