문제에서 가장 중점적으로 봤던 부분
1. 첫 번째 주사위가 놓이는 방향
2. 주사위를 쌓았을 때 bottom과 top이 아닌 수 중에서 가장 큰 수가 더해지는 값이 된다는 점.
문제 풀이 방법
1. bottom의 인덱스가 0~6일 때 top의 인덱스를 구해주어 bottom과 top을 저장하는 백터에 넣어주었습니다.
2. bottom과 top이 모두 6이 아니라면 6을, bottom이 5, top이 6(bottom이 6, top이 5)의 상황인 경우 4를, 그 이외에는 5를 sum에 더해주었습니다.
3. 최종적으로 maxsum을 구해서 가장 큰 수를 출력합니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int dia[10001][6];
vector<pair<int, int>> vec[10001];
int n, bottom, top, sum = 0, maxsum = 0;
int diasum() {
if (bottom != 6 && top != 6) {
return 6;
}
else {
if ((bottom == 6 && top == 5) || (bottom == 5 && top == 6)) return 4;
else {
return 5;
}
}
}
int main(void) {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < 6; j++) {
cin >> dia[i][j];
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < 6; j++) {
bottom = j;
if (bottom == 0) top = 5;
else if (bottom == 1 || bottom == 2) top = bottom + 2;
else if (bottom == 3 || bottom == 4) top = bottom - 2;
else if (bottom == 5) top = 0;
vec[i].push_back(make_pair(dia[i][bottom], dia[i][top]));
}
}
for (int k = 0; k < 6; k++) {
bottom = vec[0][k].first;
top = vec[0][k].second;
sum += diasum();
for (int i = 1; i < n; i++) {
for (int j = 0; j < 6; j++) {
if (top == vec[i][j].first) {
bottom = vec[i][j].first;
top = vec[i][j].second;
}
else continue;
sum += diasum();
break;
}
}
maxsum = max(sum, maxsum);
sum = 0;
}
cout << maxsum;
}
'Koala - 4기' 카테고리의 다른 글
[BOJ] 1477 휴게소 세우기 (0) | 2021.07.27 |
---|---|
[BOJ] 1477 휴게소 세우기 (4) | 2021.07.26 |
[BOJ] 2116 주사위 쌓기 (0) | 2021.07.25 |
[BOJ] 2116 주사위 쌓기 (0) | 2021.07.25 |
[BOJ 1918번] : 후위 표기식 (0) | 2021.07.24 |