블로그 언저리인 무언가
[백준/BOJ] 14499 주사위 굴리기 본문
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