Algorithm/BOJ

14499. 주사위 굴리기

 

 

단순 구현문제였다. 

 

주사위의 구조를 코드로 어떻게 표현하느냐가 관건인 문제인 것 같다.

 

나의 경우는 6칸짜리 배열을 선언해서 각각에 대하여 아래와 같이 설정했다.

~~~

0 : top

1 : down

2 : front

3 : back

4 : left

5 : right

~~~

 

인덱스마다 기준을 잡고 주사위의 동작을 코드로 구현했다.  

 

C/C++ 과 다르게 전처리기가 없어서 "#define" 을 쓰지 못하니 많이 불편했다.  

 

추가적으로 자바 12버전 이후로 변경된 switch 문을 사용하다가 컴파일 에러를 당했다..  

 

백준은 자바 11버전인걸 명심해야겠다.

 

 

 

 

더보기
더보기
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

public class Main {
    static int N, M, x, y, K;
    static int[][] MAP;
    static int[] sqare = {0,0,0,0,0,0};
    // top, down, front, back, left, right
    static List<Integer> Move = new ArrayList<>();

    public static void InputData() throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk = new StringTokenizer(br.readLine(), " ");
        N = Integer.parseInt(stk.nextToken());
        M = Integer.parseInt(stk.nextToken());
        x = Integer.parseInt(stk.nextToken());
        y = Integer.parseInt(stk.nextToken());
        K = Integer.parseInt(stk.nextToken());

        MAP = new int[N][M];

        for(int i = 0; i < N; i++){
            stk = new StringTokenizer(br.readLine(), " ");
            for(int j = 0; j < M; j++){
                MAP[i][j] = Integer.parseInt(stk.nextToken());
            }
        }

        stk = new StringTokenizer(br.readLine(), " ");
        while(stk.hasMoreTokens()){
            Move.add(Integer.parseInt(stk.nextToken()));
        }

        br.close();
    }

    public static void movement(int a, int b, int c, int d){
        int tmp = sqare[a];
        sqare[a] = sqare[b];
        sqare[b] = sqare[c];
        sqare[c] = sqare[d];
        sqare[d] = tmp;
    }


    public static void print_and_move(BufferedWriter bw) throws IOException {
        if (MAP[x][y] == 0){
            MAP[x][y] = sqare[1];
        } else{
            sqare[1] = MAP[x][y];
            MAP[x][y] = 0;
        }
        bw.write(String.valueOf(sqare[0]) + "\n");
    }


    public static void main(String[] args) throws IOException {
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        InputData();


        for (Integer move : Move) {
            switch(move){
                case 1:
                    if(y == M - 1) continue;
                    y++;
                    movement(0, 4, 1, 5);
                    //top, left, down, right 변경

                    print_and_move(bw);
                    break; // 동쪽 이동
                case 2 :
                    if(y == 0) continue;
                    y--;
                    movement(0,5,1,4);
                    //top, right, down, left 순으로 변경
                    
                    print_and_move(bw);
                    break; // 서쪽 이동
                case 3 :
                    if(x == 0) continue;
                    x--;

                    movement(0,2,1,3);
                    //top, front, down, back 순으로 변경

                    print_and_move(bw);
                    break; // 북쪽 이동
                default :
                    if(x == N - 1) continue;
                    x++;

                    movement(0,3,1,2);
                    //top, back, down, front 순으로 변경

                    print_and_move(bw);
                    break;// 남쪽 이동
            }
        }

        bw.flush();
        bw.close();
    }
}