알고리즘/문제풀이

[시뮬레이션] 주사위 굴리기

lipnus 2019. 3. 26. 21:51
반응형

백준 14499번 주사위굴리기 (삼성 SW역량테스트 기출)

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



import javax.swing.text.Position;
import java.util.Scanner;

public class Main {

static int N;
static int M;
static int[][] map;

static Position pos;
static int K;

static int[] dice = new int[7];

//1~4
static int[] dn = {0, 0, 0, -1, 1};
static int[] dm = {0, 1, -1, 0, 0};

public static void main(String[] args){
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
M = sc.nextInt();
map = new int[N+1][M+1];

int n = sc.nextInt();
int m = sc.nextInt();
pos = new Position(n,m);

K = sc.nextInt();


//맵을 채워넣음
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
map[i][j] = sc.nextInt();
}
}


//명령을 수행
for(int i=1; i<=K; i++){

int D = sc.nextInt();

Position nextP = new Position(pos.n+dn[D], pos.m+dm[D]);

if( !isIn(nextP) ) continue;

rotate(D);
changeBottom(nextP);
System.out.println( getTop() );
pos = new Position(nextP.n, nextP.m);

}

}


static void rotate(int dir){

//왼쪽회전
if(dir==1){
int temp = dice[3];
dice[3] = dice[2];
dice[2] = dice[6];
dice[6] = dice[4];
dice[4] = temp;
}

//오른쪽회전
if(dir==2){
int temp = dice[3];
dice[3] = dice[4];
dice[4] = dice[6];
dice[6] = dice[2];
dice[2] = temp;
}

//위쪽으로 회전
if(dir==3){
int temp = dice[3];
dice[3] = dice[5];
dice[5] = dice[6];
dice[6] = dice[1];
dice[1] = temp;
}

//아래로 회전
if(dir==4){
int temp = dice[3];
dice[3] = dice[1];
dice[1] = dice[6];
dice[6] = dice[5];
dice[5] = temp;
}
}


static int getTop(){
return dice[3];
}


static void changeBottom(Position p){

if(map[p.n][p.m]==0){
map[p.n][p.m] = dice[6];
}else{
dice[6] = map[p.n][p.m];
map[p.n][p.m] = 0;
}

}

static boolean isIn(Position p){
if(0<= p.n && p.n <N && 0<= p.m && p.m <M) return true;
return false;
}




static class Position{
int n;
int m;

Position(int n, int m){
this.n = n;
this.m = m;
}
}
}




틀렸던 부분

1. 

좌표는 1이 아니라 0부터 시작한다.


2. 

서로 swap되는게 아니라 하나가 다른 쪽으로 복사되는 것이다.

주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 

0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 된다.


반응형

'알고리즘 > 문제풀이' 카테고리의 다른 글

[시뮬레이션] 연구실  (0) 2019.03.30
[브루트포스] 테트로미노  (0) 2019.03.26
시험감독  (0) 2019.03.25
[시뮬레이션] 뱀  (0) 2019.03.25
[BFS] 아기상어 뚜루루뚜루  (0) 2019.03.25