반응형
구현 문제였습니다.
풀이방법
다음과 같이 주사위의 방향을 설정해줍니다.
방향 설정 후 명령어를 입력받을 때마다 정답을 출력해주면 됩니다.
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;
}
}
'Algorithm > Implementation' 카테고리의 다른 글
(C++) - 백준(BOJ) 2526번 : 싸이클 (0) | 2021.04.24 |
---|---|
(C++) - 백준(BOJ) 2174번 : 로봇 시뮬레이션 (0) | 2021.04.23 |
(C++) - 백준(BOJ) 20056번 : 마법사 상어와 파이어볼 (0) | 2021.04.20 |
(C++) - 백준(BOJ) 1913번 : 달팽이 (0) | 2021.04.18 |
(C++) - 백준(BOJ) 17144번 : 미세먼지 안녕! (0) | 2021.04.15 |