[백준] 주사위 굴리기 Java

dustle·2023년 3월 28일
1

주사위 굴리기

주사위를 이동시키고, 주사위 눈이 0일 경우 그 맵에 있는 숫자를 옮겨오고, 맵이 0일경우 맵에 복사시키는 문제입니다.

주사위를 굴리면 눈이 이동하는 원리를 알아야 합니다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
    static int[] dice = new int[7];
    static int N,M,x,y;
    static int[][] map;
    static int[] X = {1, -1, 0, 0};
    static int[] Y = {0, 0, -1, 1};
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        y = Integer.parseInt(st.nextToken());
        x = Integer.parseInt(st.nextToken());
        int 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++){
            int tmp = Integer.parseInt(st.nextToken());
            move(tmp);
        }
    }

    static void move(int d) {
        int tmpX = x + X[d-1];
        int tmpY = y + Y[d-1];
        if(tmpX >= 0 &&  tmpX <= M - 1 && tmpY >= 0 && tmpY <= N - 1) {
            roll(d, tmpX, tmpY);
            x = tmpX; y = tmpY;
        }
    }

    static void roll(int d, int x, int y) {
        int tmp = dice[3];
        switch(d) {
            case 1:
                dice[3] = dice[4];
                dice[4] = dice[6];
                dice[6] = dice[2];
                dice[2] = tmp;
                break;
            case 2:
                dice[3] = dice[2];
                dice[2] = dice[6];
                dice[6] = dice[4];
                dice[4] = tmp;
                break;
            case 3:
                dice[3] = dice[5];
                dice[5] = dice[6];
                dice[6] = dice[1];
                dice[1] = tmp;
                break;
            case 4:
                dice[3] = dice[1];
                dice[1] = dice[6];
                dice[6] = dice[5];
                dice[5] = tmp;
                break;
        }
        if(map[y][x] == 0) {
            map[y][x] = dice[6];
        } else {
            dice[6] = map[y][x];
            map[y][x] =0;
        }
        System.out.println(dice[3]);
    }
}

0개의 댓글