1. 개념
시뮬레이션
2. 풀이법
주사위의 반대편 면을 배열로 만들어서 체크하는게 중요하다.
3. 코드
import java.util.Scanner;
public class back_2116주사위쌓기 {
static int side_idx[] = {5,3,4,1,2,0};
static int box[][];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
box = new int[n][6];
for (int i = 0; i < n; i++) {
for (int j = 0; j < 6; j++) {
box[i][j] = sc.nextInt();
}
}
int answer=0;
int total=0;
for (int i = 0; i < 6; i++) {//1층에서 윗면의 경우의 수
int upval=box[0][i];
total = check(upval, 0, i);
for (int fl = 1; fl < n; fl++) {//층
for (int pos = 0; pos < 6; pos++) {//한 층에서 탐색
if(upval==box[fl][pos]) {
total += check(box[fl][pos], fl, pos);
upval = box[fl][side_idx[pos]];
break;
}
}
}
answer = answer< total ? total: answer;
}
System.out.println(answer);
}
//최대값 찾기
static int check(int up, int fl, int idx) {
int temp=0;
for (int pos = 0; pos < 6; pos++) {
if(box[fl][pos]==box[fl][idx] || box[fl][pos]==box[fl][side_idx[idx]]) {
continue;
}
temp = temp < box[fl][pos]? box[fl][pos] : temp;
}
return temp;
}
}
반대편 면의 index를 배열로 만들었다
static int side_idx[] = {5,3,4,1,2,0};
아래층 윗면과 윗층 아랫면이 같은 부분을 찾는 코드, 찾고나서 upval에 윗층의 윗면으로 갱신해야 한다
for (int pos = 0; pos < 6; pos++) {//한 층에서 탐색
if(upval==box[fl][pos]) {
total += check(box[fl][pos], fl, pos);
upval = box[fl][side_idx[pos]];
break;
}
}
주사위의 윗면과 아랫면은 제외하고 최대값을 찾아준다
if(box[fl][pos]==box[fl][idx] || box[fl][pos]==box[fl][side_idx[idx]]) {
continue;
}
temp = temp < box[fl][pos]? box[fl][pos] : temp;
'알고리즘 > 백준' 카테고리의 다른 글
[백준 17086] 실버1 -아기 상어 2 (0) | 2020.09.26 |
---|---|
[백준 11403] 실버1 - 경로 찾기 (0) | 2020.09.26 |
[백준 14002] 골드4 - 가장 긴 증가하는 부분수열4 (0) | 2020.09.24 |
[백준 10157] 자리배정 (0) | 2020.09.20 |
[백준 1405] 미친 로봇 (0) | 2020.08.15 |