[알고리즘] Java / 백준 / 주사위 굴리기 / 14499

정현명·2022년 3월 11일
0

baekjoon

목록 보기
92/180
post-thumbnail

[알고리즘] Java / 백준 / 주사위 굴리기 / 14499

문제


문제 링크



접근 방식


주사위 위치를 고정하고(위쪽은 0번, 아래쪽은 6번.. 등) 방향을 움직일 때마다 주사위 각 번호의 수를 알맞게 바꿔준다

ex) 상 : 0 , 하 : 5 , 좌 : 3, 우 : 2 , 전 : 4, 후 : 1 이라 할 때 동쪽으로 주사위를 이동시키면

temp = dice[0]; // 상면 저장
dice[0] = dice[3]; // 상면에 좌면 값
dice[3] = dice[5]; // 좌면에 하면 값
dice[5] = dice[2]; // 하면에 우면 값
dice[2] = temp; // 우면에 상면 값


코드


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main_14499 {
	
	static int N,M,x,y,K;
	static int map[][];
	static int deltas[][] = {{},{0,1},{0,-1},{-1,0},{1,0}};
	static int dice[];
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		
		N = Integer.parseInt(st.nextToken());
		M = Integer.parseInt(st.nextToken());
		x = Integer.parseInt(st.nextToken());
		y = Integer.parseInt(st.nextToken());
		K = Integer.parseInt(st.nextToken());
		
		map = new int[N][M];
		
		for(int i=0;i<N;i++) {
			st = new StringTokenizer(br.readLine());
			for(int j=0;j<M;j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}
		// 상 : 0 , 하 : 5 , 좌 : 3, 우 : 2 , 전 : 4, 후 : 1
		dice = new int[6]
		
		st = new StringTokenizer(br.readLine());
		
		for(int i=0;i<K;i++) {
			int d = Integer.parseInt(st.nextToken());
			
			int nextX = x + deltas[d][0];
			int nextY = y + deltas[d][1];
			
			if(nextX < 0 || nextX >= N || nextY < 0 || nextY >= M) continue;
			
			x = nextX;
			y = nextY;
			roll(d);
			
			if(map[x][y] == 0) {
				map[x][y] = dice[5];
			}
			else {
				dice[5] = map[x][y];
				map[x][y] = 0;
			}
			
			System.out.println(dice[0]);
		}
	}
	
	public static void roll(int d) {
		
		int temp = dice[0];
		if(d==1) {
			dice[0] = dice[3];
			dice[3] = dice[5];
			dice[5] = dice[2];
			dice[2] = temp;
		}
		else if(d==2) {
			dice[0] = dice[2];
			dice[2] = dice[5];
			dice[5] = dice[3];
			dice[3] = temp;
		}
		else if(d==3) {
			dice[0] = dice[4];
			dice[4] = dice[5];
			dice[5] = dice[1];
			dice[1] = temp;
		}
		else {
			dice[0] = dice[1];
			dice[1] = dice[5];
			dice[5] = dice[4];
			dice[4] = temp;
		}
	}

}
profile
꾸준함, 책임감

0개의 댓글