CS/baekjoon

[백준 14499번] 주사위 굴리기

hanjongho 2021. 2. 22. 15:51

http://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

풀이) 

구현문제이기에 문제에서 주어진 순서대로 처리했고, 맵 밖으로 나가는 경우와 주사위 배열 수정하는부분만 확실하게 처리해주면 해결할 수 있다.

#include <iostream>
using namespace std;

int N, M, x, y, K;
int map[21][21], command[1001], dice[6] = {0, 0, 0, 0, 0, 0};

void moveDice(int dir)
{
    int tmp;
    if (dir == 1)
    {
        tmp = dice[0];
        dice[0] = dice[3];
        dice[3] = dice[5];
        dice[5] = dice[1];
        dice[1] = tmp;
    }
    else if (dir == 2)
    {
        tmp = dice[0];
        dice[0] = dice[1];
        dice[1] = dice[5];
        dice[5] = dice[3];
        dice[3] = tmp;
    }
    else if (dir == 3)
    {
        tmp = dice[0];
        dice[0] = dice[4];
        dice[4] = dice[5];
        dice[5] = dice[2];
        dice[2] = tmp;
    }
    else if (dir == 4)
    {
        tmp = dice[0];
        dice[0] = dice[2];
        dice[2] = dice[5];
        dice[5] = dice[4];
        dice[4] = tmp;
    }
    if (!map[x][y])
        map[x][y] = dice[5];
    else
    {
        dice[5] = map[x][y];
        map[x][y] = 0;
    }
    cout << dice[0] << "\n";
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);

    cin >> N >> M >> x >> y >> K;
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            cin >> map[i][j];
    for (int k = 0; k < K; k++)
        cin >> command[k];
    for (int i = 0; i < K; i++)
    {
        if (command[i] == 1)
        {
            if (y + 1 > M - 1) continue;
            y += 1;
            moveDice(1);
        }
        else if (command[i] == 2)
        {
            if (y - 1 < 0) continue;
            y -= 1;
            moveDice(2);
        }
        else if (command[i] == 3)
        {
            if (x - 1 < 0) continue;
            x -= 1;
            moveDice(3);
        } 
        else if (command[i] == 4)
        {
            if (x + 1 > N - 1) continue;
            x += 1;
            moveDice(4);
        }
    }
    return (0);
}

 

 

제 코드는 절대 완벽하지 않습니다

더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!