Java

[백준 14499] 주사위 굴리기 (JAVA)

iheeeee6-6 2023. 6. 7. 15:55
728x90

https://www.acmicpc.net/problem/14499

 

14499번: 주사위 굴리기

첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x, y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지

www.acmicpc.net

 

 

주사위를 굴렸을때의 주사위 면의 계산이 어려웠다 ㅠ

종이를 찢어서 주사위로 만들어서 해본 건 안비밀 ㅎ

 

주사위 int배열을 만들어서 

    2
 4 1 3 
    5
    6

위처럼, 인덱스 1= 상단, 2= 위, 3= 오른쪽, 4=왼쪽, 5=아래, 6= 바닥으로 한다.

초기화 값은 0으로 처리한다.

 

 

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

public class Main {

	static int n, m, k, x, y;
	static int[] dx = { 0, 0, -1, 1 }; // 1동 2서 3북 4남
	static int[] dy = { 1, -1, 0, 0 };

	//   2
	// 4 1 3 //1이 상단, 6이 바닥
	//   5
	//   6
	static int[] dice = new int[7];
	static int[][] map; // 지도

	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());
			}
		}

		st = new StringTokenizer(br.readLine());
		for (int i = 0; i < k; i++) {
			move(Integer.parseInt(st.nextToken())-1);
		}

	}

	static void move(int dir) {
		int xx= x+dx[dir];
		int yy= y+dy[dir];
		
		if(xx>=n||yy>=m||xx<0||yy<0) return;
		
		int[] temp= dice.clone();
		switch (dir) {
		case 0:
			dice[1]=temp[4];
			dice[4]=temp[6];
			dice[6]=temp[3];
			dice[3]=temp[1];
			break;

		case 1:
			dice[6]=temp[4];
			dice[1]=temp[3];
			dice[3]=temp[6];
			dice[4]=temp[1];
			break;

		case 2:
			dice[6]=temp[2];
			dice[1]=temp[5];
			dice[5]=temp[6];
			dice[2]=temp[1];
			break;

		case 3:
			dice[6]=temp[5];
			dice[1]=temp[2];
			dice[5]=temp[1];
			dice[2]=temp[6];
			break;
		}
		
		if(map[xx][yy]==0) {
			map[xx][yy]=dice[6];
		}else {
			dice[6]=map[xx][yy];
			map[xx][yy]=0;
		}

		x=xx;
		y=yy;
		
		System.out.println(dice[1]);
	}

}