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개의 줄에 지
www.acmicpc.net
쓰는 기법 아무것도 없고 그냥 주어진 '상황'에 맞게 시뮬레이션 하면 된다.
대신 철저하게 쓰여진 상황을 다 '구현'해야한다.
만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안 된다.
쓰여있으면? 무조건 코드에 박아야하는거다.
0이면 5
2이면 3
3이면 2
4이면 1
1이면 4
5이면 0
아래가 1일 떄
1
3 0 2
4
5
동으로 갔을 때
1
0 2 5
4
3
서로 갔을 때
1
5 3 0
4
2
북으로 갔을 때
5
3 1 2
0
4
남으로 갔을 때
0
3 4 2
5
1
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
|
#include <iostream>
#include <cstring>
using namespace std;
int n, m;
pair<int, int> now;
int map[22][22];
int command[1000];
int dice[6];
int c_dice[6];
/* 동: 1 서: 2 북: 3 남: 4*/
int Judge(int d)
{
if (d == 1) {
if (now.second == m - 1) return 0;
}
else if (d == 2) {
if (now.second == 0) return 0;
}
else if (d == 3) {
if (now.first == 0) return 0;
}
else if (d == 4) {
if (now.first == n - 1) return 0;
}
return 1;
}
void Movement(int d)
{
memcpy(c_dice, dice, sizeof(dice));
if (d == 1)
{
now.second++;
dice[0] = c_dice[2];
dice[3] = c_dice[0];
dice[2] = c_dice[5];
dice[5] = c_dice[3];
}
else if (d == 2)
{
now.second--;
dice[0] = c_dice[3];
dice[3] = c_dice[5];
dice[2] = c_dice[0];
dice[5] = c_dice[2];
}
else if (d == 3)
{
now.first--;
dice[0] = c_dice[1];
dice[1] = c_dice[5];
dice[4] = c_dice[0];
dice[5] = c_dice[4];
}
else if (d == 4)
{
now.first++;
dice[0] = c_dice[4];
dice[1] = c_dice[0];
dice[4] = c_dice[5];
dice[5] = c_dice[1];
}
}
int main()
{
cin >> n >> m;
cin >> now.first >> now.second;
int k;
cin >> k;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
cin >> map[i][j];
}
for (int i = 0; i < k; i++)
cin >> command[i];
for (int i = 0; i < k; i++)
{
if (!Judge(command[i])) {
continue;
}
Movement(command[i]);
if (map[now.first][now.second] == 0) {
map[now.first][now.second] = dice[0];
}
else {
dice[0] = map[now.first][now.second];
map[now.first][now.second] = 0;
}
cout << dice[5] << endl;
}
return 0;
}
|
cs |
'시뮬레이션과 구현' 카테고리의 다른 글
경사로 (0) | 2023.07.11 |
---|---|
컨베이어 벨트 위의 로봇 (0) | 2023.05.29 |
치킨 배달 - 구현 + 조합(재귀) (0) | 2023.05.23 |
드래곤 커브 (0) | 2023.05.23 |
뱀 (0) | 2023.03.18 |