반응형
문제에 주어진 그대로를 구현하는 시뮬레이션 문제이다.
이 문제에서 관건은 주사위를 굴리면서 위치마다 주어진 값들을 스왑하는 과정이 중요하다. 주사위를
0
1 2 3
4
5
위와 같은식으로 인덱싱을 하였고, 2번 인덱스를 top, 5번 인덱스를 bottom으로 생각하고 문제를 접근하였다. 그리고 각 각 방향마다 함수를 두어 스왑하는 과정을 통해 문제를 해결하였다. 그리고 문제를 읽는 과정에서 위쪽과 아래쪽을 헷갈리지 않고 방향을 주어야하는 점도 중요하다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
package selfStudy.chap07;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main_bj_14499_주사위굴리기 {
static int N,M;
static int x,y;
static int[][] map;
static int[] di = {0,0,0,-1,1}; //0,동,서,남,북
static int[] dj = {0,1,-1,0,0}; //0,동,서,남,북
static int[] dice= {0,0,0,0,0,0};
/*
* 0
* 1 2 3 //5번위치가바닥, 2번위치가 탑으로 생각하고 접근
* 4
* 5
*/
static int T;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = null;
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());
T=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 tc=0;tc<T;tc++) {
int move=Integer.parseInt(st.nextToken());
int nextX=x+di[move]; int nextY=y+dj[move];
if(nextX<0 || nextX>=N || nextY<0 || nextY>=M)
continue;
x=nextX;y=nextY; //갱신
if(move==1)
turnRight();
else if(move==2)
turnLeft();
else if(move==3)
turnUp();
else if(move==4)
turnDown();
if(map[nextX][nextY]==0) {
map[nextX][nextY]=dice[5];
}else {
dice[5]=map[nextX][nextY];
map[nextX][nextY]=0;
}
System.out.println(dice[2]);
}
}
static void turnRight() {
int temp = dice[2];
dice[2]=dice[1];
dice[1]=dice[5];
dice[5]=dice[3];
dice[3]=temp;
/*
* 0
* 5 1 2
* 4
* 3
*/
}
static void turnLeft() {
int temp = dice[2];
dice[2]=dice[3];
dice[3]=dice[5];
dice[5]=dice[1];
dice[1]=temp;
/*
* 0
* 2 3 5
* 4
* 1
*/
}
static void turnUp() {
int temp=dice[2];
dice[2]=dice[4];
dice[4]=dice[5];
dice[5]=dice[0];
dice[0]=temp;
/*
* 2
* 1 4 3
* 5
* 0
*/
}
static void turnDown() {
int temp=dice[2];
dice[2]=dice[0];
dice[0]=dice[5];
dice[5]=dice[4];
dice[4]=temp;
/*
* 5
* 1 0 3
* 2
* 4
*/
}
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
반응형
'Algorithm' 카테고리의 다른 글
[BOJ] 14891. 톱니바퀴 (0) | 2020.03.31 |
---|---|
[BOJ] 13335. 트럭 (0) | 2020.03.31 |
[BOJ] 5427. 불 (0) | 2020.03.30 |
[BOJ] 1182. 부분수열의 합 (0) | 2020.03.30 |
[BOJ] 1707. 이분 그래프 (0) | 2020.03.29 |