본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 14499번 : 주사위 굴리기

반응형

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개의 줄에 지도

www.acmicpc.net

구현 문제였습니다.

 

풀이방법

 

다음과 같이 주사위의 방향을 설정해줍니다. 

방향 설정 후 명령어를 입력받을 때마다 정답을 출력해주면 됩니다.

 

Code

#include <bits/stdc++.h>
#define fastio ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
//위,아래,동,서,남,북
vector <int> dice = {0,0,0,0,0,0};
int n,m,x,y,k;
int board[21][21];

//동,서,북,남
int dx[] = {0,0,0,-1,1};
int dy[] = {0,1,-1,0,0};

void rollDice(int dir){
    vector <int> tmp(6);
    //동
    if(dir == 1){
        tmp[5] = dice[5];
        tmp[4] = dice[4];
        tmp[3] = dice[1];
        tmp[2] = dice[0];
        tmp[1] = dice[2];
        tmp[0] = dice[3];
    }
    //서
    else if(dir == 2){
        tmp[5] = dice[5];
        tmp[4] = dice[4];
        tmp[3] = dice[0];
        tmp[2] = dice[1];
        tmp[1] = dice[3];
        tmp[0] = dice[2];
    }
    //북
    else if(dir == 3){
        tmp[5] = dice[0];
        tmp[4] = dice[1];
        tmp[3] = dice[3];
        tmp[2] = dice[2];
        tmp[1] = dice[5];
        tmp[0] = dice[4];
    }
    //남
    else if(dir == 4){
        tmp[5] = dice[1];
        tmp[4] = dice[0];
        tmp[3] = dice[3];
        tmp[2] = dice[2];
        tmp[1] = dice[4];
        tmp[0] = dice[5];
    }
    dice = tmp;
}

void updateBoard(int r, int c){
    if(!board[r][c]) board[r][c] = dice[1];
    else dice[1] = board[r][c], board[r][c] = 0;
}

int main(){
    fastio;
    cin >> n >> m >> x >> y >> k;
    for(int i = 0; i < n; i++)
        for(int j = 0; j < m; j++)
            cin >> board[i][j];

    while(k--){
        int dir;
        cin >> dir;
        int nx = x + dx[dir];
        int ny = y + dy[dir];
        if(0 > nx || nx >= n || 0 > ny || ny >= m) continue;

        rollDice(dir);
        updateBoard(nx, ny);
        cout << dice[0] << '\n';
        x = nx, y = ny;
    }
}