<링크>

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


<풀이>

주사위를 하나 그려놓고 상하좌우로 굴려보며 규칙성을 찾았다.

주사위 평면도가 다음과 같으면
2면 : 배열[0]
4면 : 배열[1]
1면 : 배열[2]
3면 : 배열[3]
5면 : 배열[4]
6면 : 배열[5]
각각 면의 숫자를 배열 해당위치에 넣어준다. 처음엔 모두 0이다.
위로 굴리면 그림처럼 아랫방향으로 shift되고 4면 3면은 변화가 없다.



우측으로 굴리면 다음과 같다.


굴리는거 구현했으면 시키는 대로 하면된다.



<소스코드>

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<stdio.h>
int dice[6= { 0,0,0,0,0,0 };
int pan[20][20];
int N, M, x, y, K;
void east();
void west();
void north();
void south();
void check();
int main()
{
    scanf("%d%d%d%d%d"&N, &M,&x,&y,&K);
    for(int i=0;i<N;++i)
        for(int j=0;j<M;++j)
            scanf("%d"&pan[i][j]);
    while (K--)
    {
        int k;
        scanf("%d"&k);
        switch (k)
        {
        case 1:
            if (y + 1 < M)
            {
                east();
                ++y;
                check();
            }
            break;
        case 2:
            if (y - 1 >= 0)
            {
                west();
                --y;
                check();
            }
            break;
        case 3:
            if (x - 1 >= 0)
            {
                north();
                --x;
                check();
            }
            break;
        case 4:
            if (x + 1 < N)
            {
                south();
                ++x;
                check();
            }
            break;
        }
    }
}
void check()
{
    
    if (pan[x][y] == 0)
        pan[x][y] = dice[2];
    else
    {
        dice[2= pan[x][y];
        pan[x][y] = 0;
    }
    printf("%d\n", dice[5]);
}
void east()
{
    int tmp = dice[1];
    dice[1= dice[2];
    dice[2= dice[3];
    dice[3= dice[5];
    dice[5= tmp;
}
void west()
{
    int tmp = dice[3];
    dice[3= dice[2];
    dice[2= dice[1];
    dice[1= dice[5];
    dice[5= tmp;
}
void south()
{
    int tmp = dice[0];
    dice[0= dice[2];
    dice[2= dice[4];
    dice[4= dice[5];
    dice[5= tmp;
}
void north()
{
    int tmp = dice[5];
    dice[5= dice[4];
    dice[4= dice[2];
    dice[2= dice[0];
    dice[0= tmp;
}
 
cs


'알고리즘 풀이 > 시뮬레이션' 카테고리의 다른 글

백준 15685 드래곤커브  (0) 2018.09.30
백준 14890 경사로 :: 들짐승  (0) 2018.07.22
백준 3190 뱀 :: 들짐승  (0) 2018.07.22
백준 12100 2048(Easy) :: 들짐승  (0) 2018.07.22

+ Recent posts