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);
}
제 코드는 절대 완벽하지 않습니다
더 좋은 풀이방법 혹은 코드에 관한 질문이 있으시면 언제든 댓글주세요!