알고리즘/삼성 SW역량테스트

백준[14499] 주사위 굴리기

vhxpffltm 2019. 8. 23. 22:58

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

 

주사위를 이용한 시뮬레이션 문제이다. 

 

처음에 이것을 굴리면서 무언가 변하는 규칙이 있을것이라 생각했다. 연습장에 6개의 인덱스를 가지는 배열을 통해 열심히 굴리면서 상, 하, 좌, 후 에 따라 변하는 값과 규칙을 찾으려 했지만 쉽지 않았다. 그렇게 고심하다 다행히 스터디원이 힌트를 주면서 쉽게 해결할 수 있었다. 

 

1차원 배열이 아닌 문제의 그림을 적용하여 3*4의 2차원 배열을 이용하여 상하좌우에 따른 규칙을 바로 그려낼 수 있었다. 이것을 만들고 회전했을 때, 밑면의 위치를 그려냈다면 나머지는 구현하면 된다.

 

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
#include<iostream>
#include<fstream>
#include<vector>
#include<string>
#include<math.h>
#include<algorithm>
#include<queue>
#include<set>
 
using namespace std;
 
int main()
{
    int arr[21][21= { 0 }, cmd[1010= { 0 };
    int dice[4][3= { 0 }, ans[4][3= { 0 };
    int n, m, x, y, k, dir = 0;
    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"&arr[i][j]);
        }
    }
    for (int i = 0; i < k; i++scanf("%d"&cmd[i]);
    //dice[1][1] = 1, dice[1][0] = 4, dice[0][1] = 2, dice[1][2] = 3, dice[2][1] = 5, dice[3][1] = 6;
    //for (int i = 0; i < 4; i++) {
        //for (int j = 0; j < 3; j++) {
            //printf("%d", dice[i][j]);
        //}
        //printf("\n");
    //}
    //printf("\n");
    //printf("방향 : %d\n", cmd[0]);
    for (int i = 0; i < k; i++) {
        int chk = 0;
        dir = cmd[i];
        if (dir == 1) {
            int temp = dice[1][1];
            x = x, y = y + 1;
            if (x >= 0 && x < n && y >= 0 && y < m) {
                dice[1][1= dice[1][0];
                dice[1][0= dice[3][1];
                dice[3][1= dice[1][2];
                dice[1][2= temp;
            }
            else {
                chk = 1;
                y = y - 1;
            }
 
        }
        else if (dir == 2) {
            int temp = dice[1][1];
            x = x, y = y - 1;
            if (x >= 0 && x < n && y >= 0 && y < m) {
                dice[1][1= dice[1][2];
                dice[1][2= dice[3][1];
                dice[3][1= dice[1][0];
                dice[1][0= temp;
            }
            else {
                chk = 1;
                y = y + 1;
            }
        }
        else if (dir == 3) {
            int temp = dice[1][1];
            x = x - 1, y = y;
            if (x >= 0 && x < n && y >= 0 && y < m) {
                dice[1][1= dice[0][1];
                dice[0][1= dice[3][1];
                dice[3][1= dice[2][1];
                dice[2][1= temp;
            }
            else {
                chk = 1;
                x = x + 1;
            }
        }
        else if (dir == 4) {
            int temp = dice[1][1];
            x = x + 1, y = y;
            if (x >= 0 && x < n && y >= 0 && y < m) {
                dice[1][1= dice[2][1];
                dice[2][1= dice[3][1];
                dice[3][1= dice[0][1];
                dice[0][1= temp;
            }
            else {
                chk = 1;
                x = x - 1;
            }
        }
        if (chk == 1continue;
        else {
            if (arr[x][y] == 0) {
                arr[x][y] = dice[3][1];
            }
            else {
                dice[3][1= arr[x][y];
                arr[x][y] = 0;
            }
            printf("%d\n", dice[1][1]);
        }
        //for (int ii = 0; ii < 4; ii++) {
            //for (int jj = 0; jj < 3; jj++) {
                //printf("%d ", dice[ii][jj]);
            //}
            //printf("\n");
        //}
    }
    return 0;
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
 

'알고리즘 > 삼성 SW역량테스트' 카테고리의 다른 글

백준[17140] 이차원 배열과 연산  (0) 2019.10.15
백준[14503] 로봇 청소기  (0) 2019.08.23
백준[3190] 뱀  (0) 2019.07.07
백준 [16234] 인구이동  (0) 2019.03.16
백준[14500] 테트로미노  (0) 2019.02.17