반응형

 

[광고 누르면 오늘의 행운 상승!!]

 

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개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10을 넘지 않는 자연수 또는 0이다. 마

www.acmicpc.net

주사위 싫당

1. 주사위가 이동한 방향대로 하드코딩한다.

2. 바닥과 맵의 값을 잘 확인한다.

import java.io.*;
import java.util.*;

class Dice {
    int top, bottom, west, east, south, north;

    public void moveEast() {
        int temp = top;
        top = west;
        west = bottom;
        bottom = east;
        east = temp;
    }

    public void moveWest() {
        int temp = top;
        top = east;
        east = bottom;
        bottom = west;
        west = temp;
    }

    public void moveSouth() {
        int temp = top;
        top = north;
        north = bottom;
        bottom = south;
        south = temp;
    }

    public void moveNorth() {
        int temp = top;
        top = south;
        south = bottom;
        bottom = north;
        north = temp;
    }
}
class 주사위굴리기 {
    
    public static int N, M, x, y, k;
    public static int[][] map;
    public static int[] dir;
    public static int[] dx = {0,0,0,-1,1}; // 동서북남
    public static int[] dy = {0,1,-1,0,0};
    public static Queue<Integer> q;
    public static void main(String[] args) throws Exception {
    	System.setIn(new FileInputStream("test.txt"));
        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];
        dir = new int[k];
 
        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());
        q = new LinkedList<>();
        for(int i=0; i<k; i++) {
        	  q.add(Integer.parseInt(st.nextToken()));
        }
        Start();
    }
 
    static void Start() {
        Dice dice = new Dice();
        int nx, ny;
 
        while(!q.isEmpty()) {
        	 int dir = q.poll();
             nx = x + dx[dir];
             ny = y + dy[dir];
  
             if(0 <= nx && nx < N && 0 <= ny && ny < M) {
                 if		(dir == 1) dice.moveEast();
                 else if(dir == 2) dice.moveWest();
                 else if(dir == 3) dice.moveNorth();
                 else if(dir == 4) dice.moveSouth();
  
                 if(map[nx][ny] == 0) 
                     map[nx][ny] = dice.bottom;
                 else {
                     dice.bottom = map[nx][ny];
                     map[nx][ny] = 0;
                 }
  
                 System.out.println(dice.top);
  
                 x = nx;
                 y = ny;
             }
         
        }
    }
}
반응형

+ Recent posts