-

백준 14499 주사위굴리기 본문

Algorithm/SSW

백준 14499 주사위굴리기

Boogallee 2018. 2. 26. 14:09



그냥. 노가다로 풀었다.



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
Comments