Notice
Recent Posts
Recent Comments
«   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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 14499 주사위 굴리기 본문

Programming/BOJ

[백준/BOJ] 14499 주사위 굴리기

he1fire 2020. 9. 23. 02:27
728x90

문제 : 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

지도의 크기와 각 칸에 쓰여있는 정수가 주어졌을 때,

주사위를 굴리는 명령이 주어질 때 위에서 보이는 면을 출력하는 문제이다.

각 방향으로 이동할 때 각 주사위의 면이 어떻게 회전하는지

알려주는 roll배열을 선언한 후 해당하는 순서로 값의 순서를 바꾸고

해당하는 칸의 명령을 수행하면 된다.

 


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N, M, x, y, T;
ll arr[25][25];
ll dice[6];//아래 위 앞 뒤 왼쪽 오른쪽
ll dir[4][2]={{0,1},{0,-1},{-1,0},{1,0}};// 동 서 북 남
ll roll[4][6]={{5,4,2,3,0,1},{4,5,2,3,1,0},{2,3,1,0,4,5},{3,2,0,1,4,5}};// 동 서 북 남
void Move(ll turn){
    ll tmp[6]={0};
    for (int i=0;i<6;i++){
        tmp[i]=dice[roll[turn][i]];
    }
    for (int i=0;i<6;i++){
        dice[i]=tmp[i];
    }
    if (arr[x][y]){
        dice[0]=arr[x][y];
        arr[x][y]=0;
    }
    else{
        arr[x][y]=dice[0];
    }
}
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> N >> M >> x >> y >> T;
    for (int i=0;i<N;i++){
        for (int j=0;j<M;j++){
            cin >> arr[i][j];
        }
    }
    while (T--){
        ll a;
        cin >> a;
        ll ax=x+dir[a-1][0], ay=y+dir[a-1][1];
        if (ax<0 || ax>=N || ay<0 || ay>=M)
            continue;
        x=ax;
        y=ay;
        Move(a-1);
        cout << dice[1] << "\n";
    }
    return 0;
}
728x90

'Programming > BOJ' 카테고리의 다른 글

[백준/BOJ] 15724 주지수  (0) 2020.09.24
[백준/BOJ] 1342 행운의 문자열  (0) 2020.09.24
[백준/BOJ] 4811 알약  (0) 2020.09.22
[백준/BOJ] 13703 물벼룩의 생존 확률  (0) 2020.09.22
[백준/BOJ] 4386 별자리 만들기  (0) 2020.09.22
Comments