-
백준 14499 주사위굴리기 본문
그냥. 노가다로 풀었다.
rotate 함수를 호출할때마다 x,y의 좌표의 경계와 그 다음을 위치를 체크하여 맵의 범위를 벗어나려하면 스킵하였다.
문제를 정확히 읽어야만...
맵의 숫자를 주사위에 카피하고 맵의 숫자를 0으로 초기화 해주지 않아 한참을 고생하였다.
코드:
#include <iostream>
using namespace std;
int n, m, x, y, k, o;
int map[21][21];
int cube[4][3];
int cp[4][3];
int nx;
int ny;
//동쪽은 1, 서쪽은 2, 북쪽은 3, 남쪽은 4
void copy_cube(){
for (int i = 0; i < 4; i++){
for (int j = 0; j < 3; j++){
cp[i][j] = cube[i][j];
}
}
}
int rotate(int x, int y, int d){
if (d == 1){ // 동쪽
if (y+1 >= m) return -1;
int tmp = cube[1][2];
cube[1][2] = cube[1][1];
cube[1][1] = cube[1][0];
cube[1][0] = cube[3][1];
cube[3][1] = tmp;
if (map[x][y + 1] == 0){
map[x][y + 1] = cube[3][1]; // 주사위 바닥면 복사
}
else{
cube[3][1] = map[x][y + 1];
map[x][y + 1] = 0;
}
copy_cube();
if (y + 1 >= m) ny = y;
else ny = y + 1;
return cube[1][1];
}
else if (d == 2){ // 서쪽
if (y-1 < 0) return -1;
int tmp = cube[1][0];
cube[1][0] = cube[1][1];
cube[1][1] = cube[1][2];
cube[1][2] = cube[3][1];
cube[3][1] = tmp;
if (map[x][y - 1] == 0){
map[x][y - 1] = cube[3][1]; // 주사위 바닥면 복사
}
else{
cube[3][1] = map[x][y - 1];
map[x][y - 1] = 0;
}
copy_cube();
if (y - 1 < 0) ny = y;
else ny = y - 1;
return cube[1][1];
}
else if (d == 3){ // 북쪽
if (x-1 < 0) return -1;
for (int i = 0; i < 4; i++){
cube[i][1] = cp[(i+1)%4][1];
}
if (map[x-1][y] == 0){
map[x-1][y] = cube[3][1]; // 주사위 바닥면 복사
}
else{
cube[3][1] = map[x-1][y];
map[x - 1][y] = 0;
}
copy_cube();
if (x - 1 < 0) nx = x;
else nx = x - 1;
nx = x - 1;
return cube[1][1];
}
else if (d == 4){
if (x+1 >= n) return -1;
for (int i = 0; i < 4; i++){
int mod = (i + 3) % 4;
cube[i][1] = cp[mod][1];
}
if (map[x+1][y] == 0){
map[x+1][y] = cube[3][1]; // 주사위 바닥면 복사
}
else{
cube[3][1] = map[x+1][y];
map[x + 1][y] = 0;
}
copy_cube();
if (x + 1 >= n) nx = x;
else nx = x + 1;
return cube[1][1];
}
}
int main(){
cin >> n >> m >> nx >> ny >> k;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin >> map[i][j];
}
}
for (int i = 1; i <= k; i++){
int tmp;
int get = 0;
cin >> tmp;
get = rotate(nx, ny, tmp);
if (get != -1)
{
cout << get << endl;
}
}
//system("pause");
return 0;
}
'Algorithm > SSW' 카테고리의 다른 글
백준 14501 퇴사 (0) | 2018.02.26 |
---|---|
백준 14502 연구소 (0) | 2018.02.19 |