[백준] 14499 주사위 굴리기

장철현·2024년 1월 20일
0

백준

목록 보기
56/80
post-thumbnail

링크

14499 주사위 굴리기

문제

풀이

이 문제 푸는데 굴리는 방향에 따라 정육면체 생각하느라 시간도 오래썻고 머리 터지는줄 알았다. 공간감각이 많이 부족한거같다.

내풀이

그림에서 하단에 동서남북으로 굴렸을때 인덱스가 변경되는 부분은 주사위 인덱스를 0~5까지로 잡고 했었는데 헷갈릴까봐 +1해서 풀었다.

즉 동쪽에서 2번 인덱스 값이 1번 인덱스로 간다라고 적혀있는데 이건 주사위 인덱스를 0~5로 잡고 했었던 방식이고
0~6까지로 하고 싶어서 3번 인덱스 값이 2번 인덱스로 간다라고 생각하면 될 것 같다.

그림에 그려놓은 것을 그대로 코드로 옮긴거라 생각이 어렵지 코딩하는 것은 쉬웠다.

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Main{
    public static int[][] map;
    public static int[] dice = {0,0,0,0,0,0,0};
    public static int diceX = 0;
    public static int diceY = 0;
    public static int[] dx = {0, 0, 0, -1, 1};
    public static int[] dy = {0, 1, -1, 0, 0};

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        String[] arr = br.readLine().split(" ");
        int x = Integer.parseInt(arr[0]);
        int y = Integer.parseInt(arr[1]);
        diceX = Integer.parseInt(arr[2]);
        diceY = Integer.parseInt(arr[3]);
        int commandCount = Integer.parseInt(arr[4]);

        map = new int[x][y];

        for (int i = 0; i < x; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());

            for (int j = 0; j < y; j++) {
                map[i][j] = Integer.parseInt(st.nextToken());
            }
            //System.out.println(Arrays.toString(map[i]));
        }

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



    }


    //동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4
    public static void move(int command){
        int newX = diceX + dx[command];
        int newY = diceY + dy[command];

//        System.out.println("command = " + command);
        if(newX < 0 || newY < 0 || newX >= map.length || newY >= map[0].length) return;

        diceX = newX;
        diceY = newY;

//        System.out.println("x = " + diceX + ", y = " + diceY);
        // 바닥면 : dice[3], 천장 : dice[6]
        if(command == 1) {
            int changeDice3 = dice[3];
            int changeDice2 = dice[2];
            int changeDice6 = dice[6];
            int changeDice4 = dice[4];

            dice[2] = changeDice3;
            dice[6] = changeDice2;
            dice[4] = changeDice6;
            dice[3] = changeDice4;

        } else if(command == 2){
            int changeDice3 = dice[3];
            int changeDice4 = dice[4];
            int changeDice6 = dice[6];
            int changeDice2 = dice[2];

            dice[4] = changeDice3;
            dice[6] = changeDice4;
            dice[2] = changeDice6;
            dice[3] = changeDice2;

        } else if(command == 3){
            int changeDice3 = dice[3];
            int changeDice5 = dice[5];
            int changeDice6 = dice[6];
            int changeDice1 = dice[1];

            dice[5] = changeDice3;
            dice[6] = changeDice5;
            dice[1] = changeDice6;
            dice[3] = changeDice1;

        } else if(command == 4){
            int changeDice3 = dice[3];
            int changeDice1 = dice[1];
            int changeDice6 = dice[6];
            int changeDice5 = dice[5];

            dice[1] = changeDice3;
            dice[6] = changeDice1;
            dice[5] = changeDice6;
            dice[3] = changeDice5;

        }


        if(map[diceX][diceY] == 0){
            map[diceX][diceY] = dice[3];
        } else{
            dice[3] = map[diceX][diceY];
            map[diceX][diceY] = 0;
        }
        System.out.println(dice[6]);


    }

}

0개의 댓글