[백준/BOJ] 백준 14499번 : 주사위 굴리기
2020. 9. 8. 02:27ㆍ알고리즘 문제풀이
int dice[6]로 주사위의 각 면(0:왼쪽, 1:뒤쪽, 2:오른쪽, 3:앞쪽, 4:위, 5:아래)의 숫자를 표현했다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, m, x, y, k;
int board[20][20];
vector<int> command;
int dxdy[5][2] = { {0,0}, {0,1},{0,-1},{-1,0},{1,0} }; //1:동쪽 2:서쪽 3:북쪽 4:남쪽
int dice[6] = { 0,0,0,0,0,0 }; //왼쪽, 뒤쪽, 오른쪽, 앞쪽, 위, 아래
int temp_dice[6] = { 0,0,0,0,0,0 };
void Solve(pair<int, int> start)
{
pair<int, int> here = start;
for (int i = 0; i < command.size(); i++)
{
//명령으로 이동되는 위치
pair<int, int> there = make_pair(here.first + dxdy[command[i]][0], here.second + dxdy[command[i]][1]);
//바깥으로 이동되는 경우
if (there.first < 0 || there.first >= n || there.second < 0 || there.second >= m)
{
continue;
}
//동쪽으로 이동일때
if (command[i] == 1)
{
temp_dice[0] = dice[5];
temp_dice[1] = dice[1];
temp_dice[2] = dice[4];
temp_dice[3] = dice[3];
temp_dice[4] = dice[0];
temp_dice[5] = dice[2];
}
//서쪽으로 이동일때
else if (command[i] == 2)
{
temp_dice[0] = dice[4];
temp_dice[1] = dice[1];
temp_dice[2] = dice[5];
temp_dice[3] = dice[3];
temp_dice[4] = dice[2];
temp_dice[5] = dice[0];
}
//북쪽으로 이동일때
else if (command[i] == 3)
{
temp_dice[0] = dice[0];
temp_dice[1] = dice[4];
temp_dice[2] = dice[2];
temp_dice[3] = dice[5];
temp_dice[4] = dice[3];
temp_dice[5] = dice[1];
}
//남쪽으로 이동일때
else if (command[i] == 4)
{
temp_dice[0] = dice[0];
temp_dice[1] = dice[5];
temp_dice[2] = dice[2];
temp_dice[3] = dice[4];
temp_dice[4] = dice[1];
temp_dice[5] = dice[3];
}
for (int i = 0; i < 6; i++)
dice[i] = temp_dice[i];
//이동하는 칸에 0이 쓰여 있을때
if (board[there.first][there.second] == 0)
{
board[there.first][there.second] = dice[5];
}
//이동하는 칸에 0이 쓰여 있지 않을때
else
{
dice[5] = board[there.first][there.second];
board[there.first][there.second] = 0;
}
//주사위 윗면을 출력
cout << dice[4] << "\n";
here = there;
}
}
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> n >> m >> x >> y >> k;
int input;
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
{
cin >> input;
board[i][j] = input;
}
for (int i = 0; i < k; i++)
{
cin >> input;
command.push_back(input);
}
pair<int, int> start = make_pair(x, y);
Solve(start);
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 14889번 : 스타트와 링크 (0) | 2020.09.08 |
---|---|
[백준/BOJ] 백준 14503번 : 로봇 청소기 (0) | 2020.09.08 |
[백준/BOJ] 백준 13458번 : 시험 감독 (0) | 2020.09.08 |
[백준/BOJ] 백준 3190번 : 뱀 (0) | 2020.09.08 |
[백준/BOJ] 백준 12100번 : 2048 (Easy) (0) | 2020.09.08 |