이 문제 푸는데 굴리는 방향에 따라 정육면체 생각하느라 시간도 오래썻고 머리 터지는줄 알았다. 공간감각이 많이 부족한거같다.
내풀이
그림에서 하단에 동서남북으로 굴렸을때 인덱스가 변경되는 부분은 주사위 인덱스를 0~5까지로 잡고 했었는데 헷갈릴까봐 +1해서 풀었다.
즉 동쪽에서 2번 인덱스 값이 1번 인덱스로 간다라고 적혀있는데 이건 주사위 인덱스를 0~5로 잡고 했었던 방식이고
0~6까지로 하고 싶어서 3번 인덱스 값이 2번 인덱스로 간다라고 생각하면 될 것 같다.
그림에 그려놓은 것을 그대로 코드로 옮긴거라 생각이 어렵지 코딩하는 것은 쉬웠다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
public class Main{
public static int[][] map;
public static int[] dice = {0,0,0,0,0,0,0};
public static int diceX = 0;
public static int diceY = 0;
public static int[] dx = {0, 0, 0, -1, 1};
public static int[] dy = {0, 1, -1, 0, 0};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] arr = br.readLine().split(" ");
int x = Integer.parseInt(arr[0]);
int y = Integer.parseInt(arr[1]);
diceX = Integer.parseInt(arr[2]);
diceY = Integer.parseInt(arr[3]);
int commandCount = Integer.parseInt(arr[4]);
map = new int[x][y];
for (int i = 0; i < x; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < y; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
//System.out.println(Arrays.toString(map[i]));
}
StringTokenizer st = new StringTokenizer(br.readLine());
for(int i=0;i<commandCount;i++){
int command = Integer.parseInt(st.nextToken());
move(command);
}
}
//동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4
public static void move(int command){
int newX = diceX + dx[command];
int newY = diceY + dy[command];
// System.out.println("command = " + command);
if(newX < 0 || newY < 0 || newX >= map.length || newY >= map[0].length) return;
diceX = newX;
diceY = newY;
// System.out.println("x = " + diceX + ", y = " + diceY);
// 바닥면 : dice[3], 천장 : dice[6]
if(command == 1) {
int changeDice3 = dice[3];
int changeDice2 = dice[2];
int changeDice6 = dice[6];
int changeDice4 = dice[4];
dice[2] = changeDice3;
dice[6] = changeDice2;
dice[4] = changeDice6;
dice[3] = changeDice4;
} else if(command == 2){
int changeDice3 = dice[3];
int changeDice4 = dice[4];
int changeDice6 = dice[6];
int changeDice2 = dice[2];
dice[4] = changeDice3;
dice[6] = changeDice4;
dice[2] = changeDice6;
dice[3] = changeDice2;
} else if(command == 3){
int changeDice3 = dice[3];
int changeDice5 = dice[5];
int changeDice6 = dice[6];
int changeDice1 = dice[1];
dice[5] = changeDice3;
dice[6] = changeDice5;
dice[1] = changeDice6;
dice[3] = changeDice1;
} else if(command == 4){
int changeDice3 = dice[3];
int changeDice1 = dice[1];
int changeDice6 = dice[6];
int changeDice5 = dice[5];
dice[1] = changeDice3;
dice[6] = changeDice1;
dice[5] = changeDice6;
dice[3] = changeDice5;
}
if(map[diceX][diceY] == 0){
map[diceX][diceY] = dice[3];
} else{
dice[3] = map[diceX][diceY];
map[diceX][diceY] = 0;
}
System.out.println(dice[6]);
}
}