티스토리 뷰

# 문제

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



# 풀이


이 문제는 시뮬레이션(문제에서 지시하는대로 코딩) 문제입니다.

위 문제핵심은 주사위 굴리기 굴릴때의 조건 맞추기 입니다.


- 주사위 굴리기 -


주사위는 배열을 만들어 주사위 칸을 만들었고, 문제에서 처음 주어진 주사위의 모양을 이용하였습니다.

2 4 1 3 5 6

위와 같이 배열의 1 번째가 무조건 위, 아래는 6 번째로 잡고 시작합니다.

동으로 갈때는, [1 -> 3]  [3 -> 6]  [6 -> 4]  [4 -> 1] 로 바뀌게 되어 네개의 칸(1,3,4,6)만 한칸씩 밀리게 됩니다.

서는 그 반대며, 남과 북도 비슷하게 4칸(1,2,5,6)만 바꾸면 됩니다.


- 굴릴때의 조건 맞추기 -


해당 조건은 굉장히 맞추기 쉽습니다. 

문제를 차근차근 읽으신 뒤에 푸신다면 금방 코딩 하실 수 있습니다.



나머지는 문제에 나온대로 따라가시면 굉장히 쉽게 풀 수 있습니다.

조심해야할 점은, 쉽게 넘기고 갈 수 있는 좌표에서 나옵니다.

저도 이 부분에서 한번 틀렸습니다....

문제를 자세하게 읽어보신 후에 푸시는 것을 추천 드립니다 :)



# 코드


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;
 
int map[20][20= {0, };
int dice[6= {0,};
 
int dr[4= {1,-1,0,0}; //동,서,북,남
int dc[4= {0,0,-1,1};
 
void rotateDice(int dir) {
    //east
    if(dir == 1){
        int temp = dice[0];
        dice[0= dice[3];
        dice[3= dice[5];
        dice[5= dice[2];
        dice[2= temp;
    }
    //west
    else if(dir == 2){
        int temp = dice[0];
        dice[0= dice[2];
        dice[2= dice[5];
        dice[5= dice[3];
        dice[3= temp;
    }
    //north
    else if(dir == 3){
        int temp = dice[0];
        dice[0= dice[4];
        dice[4= dice[5];
        dice[5= dice[1];
        dice[1= temp;
    }
    //south
    else {
        int temp = dice[0];
        dice[0= dice[1];
        dice[1= dice[5];
        dice[5= dice[4];
        dice[4= temp;
    }
}
int main(){
    int N,M,x,y,K;
    cin >> N >> M >> x >> y >> K;
    
    for(unsigned int i = 0; i < N; i++){
        for(unsigned int j = 0; j < M; j++){
            cin >> map[i][j];
        }
    }
    
    int dir;
    while(K > 0){
        cin >> dir;
        //갈 수 있는지 확인
        int nr = y + dr[dir-1];
        int nc = x + dc[dir-1];
        if(nr >= 0 && nr < M && nc >= 0 && nc < N){
            rotateDice(dir);
            y = nr;
            x = nc;
            //문제 조건
if(map[x][y] == 0){
                map[x][y] = dice[5];
            }else{
                dice[5= map[x][y];
                map[x][y] = 0;
            }
            cout << dice[0<< "\n";
        }
        K--;
    }
    return 0;
}
 

cs


'알고리즘 문제 풀이 > BOJ' 카테고리의 다른 글

[BOJ 3568] iSharp  (0) 2019.02.11
[BOJ 15662] 톱니바퀴(2)  (0) 2019.02.10
[BOJ 16234] 인구 이동  (0) 2018.10.25
[BOJ 16235] 나무 재테크  (0) 2018.10.24
[BOJ 16236] 아기 상어  (0) 2018.10.23
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
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
글 보관함