이전에 어렵게 풀었었던 16939번 222 큐브와 비슷하다.
움직였을때 주사위의 위치를 일일이 바꿔주었다.
#include <iostream>
#include <vector>
using namespace std;
int map[20][20];
int n, m, a, b, k;
int square[7];
int dx[4] = { 0,0,-1,1 };
int dy[4] = { 1,-1,0,0 };
void go(int nx,int ny,int dir) {
if (dir == 0) {
int temp = square[3];
square[3] = square[1];
square[1] = square[4];
square[4] = square[6];
square[6] = temp;
}
else if (dir == 1) {
int temp = square[3];
square[3] = square[6];
square[6] = square[4];
square[4] = square[1];
square[1] = temp;
}
else if (dir == 2) {
int temp = square[1];
square[1] = square[5];
square[5] = square[6];
square[6] = square[2];
square[2] = temp;
}
else {
int temp = square[1];
square[1] = square[2];
square[2] = square[6];
square[6] = square[5];
square[5] = temp;
}
cout << square[1] << '\n';
}
int main() {
//freopen("in1.txt", "rt", stdin);
cin >> n >> m >> a >> b >> k;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> map[i][j];
}
}
int move = 0;
while (k--) {
cin >> move;
move--;
int nx = a + dx[move];
int ny = b + dy[move];
if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
go(nx,ny,move);
if (map[nx][ny] == 0) map[nx][ny] = square[6];
else {
square[6] = map[nx][ny];
map[nx][ny] = 0;
}
a = nx; b = ny;
}
return 0;
}