본문 바로가기
  • 소소한 개발자 이야기
Algorithm Study/BOJ with C++

(BAEKJOON) 14499번: 주사위 굴리기

by Siwan_Min 2020. 4. 17.
728x90

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
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
/*
문제 해결 방안:
주사위가 동, 서, 북, 남으로 움직일 때 어떻게 변하는지 코드로 구현한다.
문제의 조건에 따라 주사위의 위치에 보드의 값이 0이면 주사위의 하단 값을 보드로 복사한다.
주사위의 위치에 보드의 값이 0이 아니라면 주사위의 하단 값을 보드의 값으로 복사 한다. 
*/
 
#include <iostream>
 
using namespace std;
 
int n, m, sy, sx, k;
int map[20][20];
 
int dice[6];
 
const int dy[] = { 00-11 };
const int dx[] = { 1-100 };
                //동 서 북 남
 
void move_dice(int dir) {
    int ndice[6];
    switch (dir) // dir 이 
    {
    case 0//동쪽인 경우 
            ndice[0= dice[0];
            ndice[5= dice[1];
            ndice[2= dice[2];
            ndice[4= dice[3];
            ndice[1= dice[4];
            ndice[3= dice[5];
            break;
    case 1//서쪽
            ndice[0= dice[0];
            ndice[4= dice[1];
            ndice[2= dice[2];
            ndice[5= dice[3];
            ndice[3= dice[4];
            ndice[1= dice[5];
            break;
    case 2//북쪽
            ndice[3= dice[0];
            ndice[0= dice[1];
            ndice[1= dice[2];
            ndice[2= dice[3];
            ndice[4= dice[4];
            ndice[5= dice[5];
            break;
    case 3//남족
            ndice[1= dice[0];
            ndice[2= dice[1];
            ndice[3= dice[2];
            ndice[0= dice[3];
            ndice[4= dice[4];
            ndice[5= dice[5];
            break;
    default//그것도 아니면 
        break;
    }
    for (int i = 0; i < 6; i++) {
        dice[i] = ndice[i]; //임시 배열에 저장해 두었던 값을 다시 주사위에 업데이트 해줌.
    }
}
 
int main() {
    
    cin >> n >> m >> sy >> sx >> k;
 
    for (int y = 0; y < n; y++) {
        for (int x = 0; x < m; x++) {
            cin >> map[y][x];
        }
    }
 
    int dir;
    for (int i = 0; i < k; i++) { //k만큼 방향 명령 반복 
        cin >> dir;
        dir--;
        int ny = sy + dy[dir];
        int nx = sx + dx[dir];
        if (ny < 0 || ny >= n || nx < 0 || nx >= m) continue// 범위 밖으로 벗어나면 continue 
 
        move_dice(dir); // 방향을 받아서 회전한다. 
 
        if (map[ny][nx] == 0) { // 만약 맵의 숫자가 0 이면 
            map[ny][nx] = dice[3]; // 맵에 주사위 밑 면의 숫자를 복사한다. 
        }
        else { 
            dice[3= map[ny][nx]; //0이 아니면 맵의 숫자를 주사위 밑면에 복사 
            map[ny][nx] = 0// 맵은 0 처리
        }
        sy = ny;
        sx = nx;
 
        cout << dice[1<< endl;
    }
    system("pause");
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
728x90

'Algorithm Study > BOJ with C++' 카테고리의 다른 글

(BAEKJOON) 14891번: 톱니바퀴  (0) 2020.04.20
(BAEKJOON) 13458번: 시험 감독  (0) 2020.04.18
(BAEKJOON) 14500번: 테트로미노  (0) 2020.04.17
(BAEKJOON) 12100번: 2048(Easy)  (0) 2020.04.16
(BAEKJOON) 3190번: 뱀  (0) 2020.04.16

댓글