https://www.acmicpc.net/problem/2116
function solution(dice) {
let answer = 0;
let pair = new Array(7);
pair[1] = 6;
pair[2] = 4;
pair[3] = 5;
pair[4] = 2;
pair[5] = 3;
pair[6] = 1;
for (let i = 1; i <= 6; i++) {
let sum = 0;
let sideMax = 0;
for (let j = 1; j <= 6; j++) {
if (j != dice[0][i - 1] && j != dice[0][pair[i] - 1]) {
sideMax = Math.max(sideMax, j);
}
}
sum += sideMax;
let x = dice[0][i - 1];
let idx = 0;
for (let k = 2; k <= dice.length; k++) {
sideMax = 0;
for (let l = 1; l <= 6; l++) {
if (dice[k - 1][l - 1] === x) {
idx = l;
break;
}
}
let top = dice[k - 1][pair[idx] - 1];
let bottom = x;
for (let m = 1; m <= 6; m++) {
if (m != top && m != bottom) sideMax = Math.max(sideMax, m);
}
sum += sideMax;
x = top;
}
answer = Math.max(answer, sum);
}
return answer;
}
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : 'input.txt';
let input = fs.readFileSync(filePath).toString().trim().split('\n');
let dice = [];
input.slice(1).map((i) => dice.push(i.split(' ').map(Number)));
console.log(solution(dice));
✔ 알고리즘 : 구현
✔ pair 배열을 통해 마주보는 면을 미리 정의
✔ 맨 아래 주사위에서 윗면을 고르는 경우의 수 6가지로 부터 출발 (i for문)
✔ 위아래 면을 제외한 제일 큰 수 고르기 (j for문) 👉 제일 큰 수 sum에 더해줌
✔ 윗면의 수가 정해졌으므로 2번 주사위부터 탐색시작 (k for문)
✔ 해당 주사위의 위아래 면 찾기 (l for문)
✔ 해당 주사위의 옆면 중 최댓값 찾기 (m for문) 👉 제일 큰 수 sum에 더해줌
✔ 난이도 : 백준 기준 골드 4