[BOJ]14499 주사위 굴리기

시뮬레이션 예제

Posted by kyoungIn on April 10, 2019

주사위 굴리기

링크

풀이

주사위 도면에 번호를 표시해놓고 그 번호가 동,서,남,북 으로 이동할때 어떻게 변화하나를 통해 각각 방향으로 이동할때의

인덱스 변화를 알 수 있었다.

각 방향으로 회전시켜주고 나머지 것들을 처리해줬다.

입력을 지도의 세로 n 가로 m 주사위의 위치 x,y 명령 수 k 를 받는다고 해서

cin » n » m » x » y » k ;

했는데

입력 데이터에 함정이 숨어져 있었다..;

x가 행번호도 y가 열번호이다..

cin » n » m » y » x » k ;

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
#include <iostream>
#include <vector>
using namespace std;
vector<int> data(7);//인덱스에 따른 면 -->1:아래 2:앞 3:왼쪽 4:오른쪽 5:위 6:뒤
int n,m;
void cal(int val){
    vector<int> temp=data;
    switch (val) {
        case 1:
            temp[1]=data[4];
            temp[3]=data[1];
            temp[4]=data[5];
            temp[5]=data[3];
            break;
        case 2:
            temp[1]=data[3];
            temp[3]=data[5];
            temp[4]=data[1];
            temp[5]=data[4];
            break;
        case 3:
            temp[1]=data[6];
            temp[2]=data[1];
            temp[5]=data[2];
            temp[6]=data[5];
            break;
        default:
            temp[1]=data[2];
            temp[2]=data[5];
            temp[5]=data[6];
            temp[6]=data[1];
            break;
    }
    data=temp;
    
}
int dy[]={0,0,0,-1,1},dx[]={0,1,-1,0,0};

int main(){
    int y,x,k;
    cin >> n >> m >> y >> x >> k;
    vector<vector<int>> map(n);
    vector<int> order(k);
    for(int i=0;i<n;i++){
        map[i].resize(m,0);
        for(int j=0;j<m;j++)
            cin >> map[i][j];
    }
    for(int i=0;i<k;i++)
        cin >> order[i];
    
    int ny=0,nx=0;
    for(int i=0;i<k;i++){ //동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4
        ny=y+dy[order[i]];
        nx=x+dx[order[i]];
        if(ny< 0 || nx < 0 || ny>=n || nx>=m) continue;
        cal(order[i]);
        if(map[ny][nx]==0)
            map[ny][nx]=data[1];
        else{
            data[1]=map[ny][nx];
            map[ny][nx]=0;
        }
        cout <<data[5]<<'\n';
        y=ny;x=nx;
    }
}