|
| 1 | +import java.util.Scanner; |
| 2 | + |
| 3 | +public class Main { |
| 4 | + public static int[] dice=new int[6]; //위, 아래, 동,서,남,북 |
| 5 | + public static int[] mx=new int[]{0,0,-1,1}; |
| 6 | + public static int[] my=new int[]{1,-1,0,0}; |
| 7 | + public static int[][] maze; |
| 8 | + public static int n,m,x,y,k; |
| 9 | + public static final int UP=0,DOWN=1,EAST=2,WEST=3,SOUTH=4,NORTH=5; |
| 10 | + public static boolean isIn(int x,int y){ |
| 11 | + return x>=0&&x<n&&0<=y&&y<m; |
| 12 | + } |
| 13 | + public static void moveDice(int op){ |
| 14 | + int temp; |
| 15 | + if(op==0){//동 |
| 16 | + //동->아래 |
| 17 | + //아래->서 |
| 18 | + //서->위 |
| 19 | + //위->동 |
| 20 | + temp=dice[EAST]; |
| 21 | + dice[EAST]=dice[UP]; |
| 22 | + dice[UP]=dice[WEST]; |
| 23 | + dice[WEST]=dice[DOWN]; |
| 24 | + dice[DOWN]=temp; |
| 25 | + } |
| 26 | + else if(op==1){//서 |
| 27 | + //서->아래 |
| 28 | + //아래->동 |
| 29 | + //동->위 |
| 30 | + //위->서 |
| 31 | + temp=dice[WEST]; |
| 32 | + dice[WEST]=dice[UP]; |
| 33 | + dice[UP]=dice[EAST]; |
| 34 | + dice[EAST]=dice[DOWN]; |
| 35 | + dice[DOWN]=temp; |
| 36 | + } |
| 37 | + else if(op==2){//북 |
| 38 | + //북->아래 |
| 39 | + //아래->남 |
| 40 | + //남->위 |
| 41 | + //위->북 |
| 42 | + temp=dice[NORTH]; |
| 43 | + dice[NORTH]=dice[UP]; |
| 44 | + dice[UP]=dice[SOUTH]; |
| 45 | + dice[SOUTH]=dice[DOWN]; |
| 46 | + dice[DOWN]=temp; |
| 47 | + } |
| 48 | + else{//남 |
| 49 | + //남->아래 |
| 50 | + //아래->북 |
| 51 | + //북->위 |
| 52 | + //위->남 |
| 53 | + temp=dice[SOUTH]; |
| 54 | + dice[SOUTH]=dice[UP]; |
| 55 | + dice[UP]=dice[NORTH]; |
| 56 | + dice[NORTH]=dice[DOWN]; |
| 57 | + dice[DOWN]=temp; |
| 58 | + } |
| 59 | + } |
| 60 | + public static void main(String[] args){ |
| 61 | + Scanner sc=new Scanner(System.in); |
| 62 | + |
| 63 | + n=sc.nextInt(); |
| 64 | + m=sc.nextInt(); |
| 65 | + x=sc.nextInt(); |
| 66 | + y=sc.nextInt(); |
| 67 | + k=sc.nextInt(); |
| 68 | + |
| 69 | + maze=new int[n][m]; |
| 70 | + |
| 71 | + for(int i=0;i<n;i++){ |
| 72 | + for(int j=0;j<m;j++){ |
| 73 | + maze[i][j]=sc.nextInt(); |
| 74 | + } |
| 75 | + } |
| 76 | + |
| 77 | + for(int i=0;i<k;i++){ |
| 78 | + int op=sc.nextInt(); |
| 79 | + op--; |
| 80 | + int nx=x+mx[op]; |
| 81 | + int ny=y+my[op]; |
| 82 | + |
| 83 | + if(!isIn(nx,ny)) continue; |
| 84 | + |
| 85 | + if(op==0){//동 |
| 86 | + if(maze[nx][ny]!=0) { |
| 87 | + dice[EAST]=maze[nx][ny]; |
| 88 | + maze[nx][ny]=0; |
| 89 | + } |
| 90 | + else maze[nx][ny]=dice[EAST]; |
| 91 | + } |
| 92 | + else if(op==1){//서 |
| 93 | + if(maze[nx][ny]!=0){ |
| 94 | + dice[WEST]=maze[nx][ny]; |
| 95 | + maze[nx][ny]=0; |
| 96 | + } |
| 97 | + else maze[nx][ny]=dice[WEST]; |
| 98 | + } |
| 99 | + else if(op==2){//북 |
| 100 | + if(maze[nx][ny]!=0) { |
| 101 | + dice[NORTH]=maze[nx][ny]; |
| 102 | + maze[nx][ny]=0; |
| 103 | + } |
| 104 | + else maze[nx][ny]=dice[NORTH]; |
| 105 | + } |
| 106 | + else{//남 |
| 107 | + if(maze[nx][ny]!=0){ |
| 108 | + |
| 109 | + dice[SOUTH]=maze[nx][ny]; |
| 110 | + maze[nx][ny]=0; |
| 111 | + } |
| 112 | + else maze[nx][ny]=dice[SOUTH]; |
| 113 | + } |
| 114 | + moveDice(op); |
| 115 | + x=nx; |
| 116 | + y=ny; |
| 117 | + System.out.println(dice[UP]); |
| 118 | + } |
| 119 | + } |
| 120 | +} |
0 commit comments