반응형
문제 링크: https://www.acmicpc.net/problem/14499
<문제 풀이> 시뮬레이션
2
4 1 3
5
6
문제에서 나온 주사위를 배열로 표현하면 dice[1] == 윗면, dice[6] == 바닥
동쪽으로 굴렸을 때
2
6 4 1
5
3
서쪽으로 굴렸을 때
2
1 3 6
5
4
북쪽으로 굴렸을 때
1
4 5 3
6
2
님쪽으로 굴렸을 때
6
4 2 3
1
5
굴리기 전 배열의 값을 temp에 저장해놓고 위에 바뀐 주사위의 상태를 기록하면 됩니다.
배열의 값은 변하지만, 인덱스의 의미는 그대로 주사위의 윗면, 바닥면, 옆면을 의미합니다.
<C++ 소스 코드>
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
|
#include <iostream>
using namespace std;
#define EAST 1
#define WEST 2
#define NORTH 3
#define SOUTH 4
int N, M, x, y, k;
int board[20][20];
int dice[7]; // 바닥 index = 6
const int dx[5] = { 0, 0, 0, -1, 1 }; // (1, 2, 3, 4) == (동, 서, 북, 남)
const int dy[5] = { 0, 1,-1, 0, 0 };
void rotateDice(int dir) {
int temp[7];
for (int i = 0; i < 7; i++) temp[i] = dice[i];
if (dir == EAST) {
dice[1] = temp[4];
dice[3] = temp[1];
dice[4] = temp[6];
dice[6] = temp[3];
}
else if (dir == WEST) {
dice[1] = temp[3];
dice[3] = temp[6];
dice[4] = temp[1];
dice[6] = temp[4];
}
else if (dir == NORTH) {
dice[1] = temp[5];
dice[2] = temp[1];
dice[5] = temp[6];
dice[6] = temp[2];
}
else if (dir == SOUTH) {
dice[1] = temp[2];
dice[2] = temp[6];
dice[5] = temp[1];
dice[6] = temp[5];
}
}
void move(int dir) {
int nx = x + dx[dir];
int ny = y + dy[dir];
if (nx < 0 || ny < 0 || nx >= N || ny >= M) return; // 주사위는 지도의 바깥으로 이동시킬 수 없다.
rotateDice(dir); // 주사위 이동
if (board[nx][ny] == 0) {//이동한 칸에 쓰여 있는 수가 0이면
board[nx][ny] = dice[6]; //주사의위 바닥면에 쓰여 있는 수가 칸에 복사된다.
}
else {
dice[6] = board[nx][ny]; //칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며,
board[nx][ny] = 0; // 칸에 쓰여 있는 수는 0이 된다.
}
cout << dice[1]<<'\n';
x = nx;
y = ny;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
cin >> N >> M >> x >> y >> k;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
cin>>board[i][j];
}
}
for (int i = 0; i < k; i++) {
int command; cin >> command;
move(command);
}
return 0;
}
|
cs |
반응형
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 2638번] 치즈 (0) | 2022.01.17 |
---|---|
[백준 16985번] Maaaaaaaaaze (0) | 2022.01.16 |
[백준 6443번] 애너그램 (0) | 2022.01.14 |
[백준 11559번] Puyo Puyo (0) | 2022.01.13 |
[백준 15686번] 치킨 배달 (0) | 2022.01.09 |