문제 분석
입력의 형태는 주사위의 전개도 값을 주어진다. 이때 주사위의 값의 패턴이 없기 때문에 주사위가 쌓일 때 바닥과 천장의 값을 직접 찾아야 하고 같은 이유로 측면에 놓이는 값들을 구해야한다.
한 쪽 측면에 놓이는 값들의 합중에서 가장 큰 수를 원하기 때문에 한개의 주사위의 옆면에 해당하는 값들중 가장 큰 수만 선정하면 된다. 즉 주사위를 쌓는 경우에 대해서 찾으면 값은 알 수 있게 된다는 의미이다.
#include <iostream>
#include <algorithm>
using namespace std;
// 아래면의 인덱스를 윗면으로 단순히 바꿔줌
int top_val(int index) {
if (index == 0) return 5;
if (index == 1) return 3;
if (index == 2) return 4;
if (index == 3) return 1;
if (index == 4) return 2;
if (index == 5) return 0;
return 0;
}
int main() {
int N;
int map[10000][6];
cin >> N;
for (int i = 0; i < N; i++) {
for (int s = 0; s < 6; s++) {
cin >> map[i][s];
}
}
int ans = 0;
for (int a = 0; a < 6; a++) {
int temp_ans = 0;
int index = a;
int max_val = 0;
for (int i = 0; i < N - 1; i++) {
max_val = 0;
index = top_val(index);
for (int s = 0; s < 6; s++) {
if (map[i + 1][s] == map[i][index]) {
for (int x = 0; x < 6; x++) {
if (x == index || x == top_val(index)) { continue; }
else max_val = max(max_val, map[i][x]);
}
index = s;
break;
}
}
temp_ans += max_val;
}
max_val = 0;
index = top_val(index);
for (int x = 0; x < 6; x++) {
if (x == index || x == top_val(index)) { continue; }
else max_val = max(max_val, map[N - 1][x]);
}
temp_ans += max_val;
ans = max(temp_ans, ans);
}
cout << ans;
return 0;
}
'Koala - 14기 > 코딩테스트 준비 스터디' 카테고리의 다른 글
[백준/python] 호텔 방 번호 (0) | 2024.03.17 |
---|---|
[백준/C++] 1855번 : 암호 (0) | 2024.03.17 |
[백준/C++] 14916 거스름돈 (0) | 2024.03.17 |
[백준/Python] 16987 - 계란으로 계란치기 (0) | 2024.03.14 |
[백준/C++] 20008 몬스터를 처치하자! (0) | 2024.03.13 |