본문 바로가기
백준 알고리즘/시뮬레이션

백준 14499번 C++

by paysmile 2019. 1. 27.


#include<iostream>

#include <cstring>

using namespace std;


const int MAX = 21;

int n, m, x, y, k;

int arr[MAX][MAX];

int cmd[1001]; 

int dicenum[6];

int dicecopy[6];


void dicemove(int i) {

for (int i = 0; i < 6; i++) {

dicecopy[i] = dicenum[i];

}

switch (cmd[i]) {

case 1:

dicenum[1] = dicecopy[5];

dicenum[2] = dicecopy[1];

dicenum[3] = dicecopy[2];

dicenum[5] = dicecopy[3];


break;

case 2:

dicenum[1] = dicecopy[2];

dicenum[2] = dicecopy[3];

dicenum[3] = dicecopy[5];

dicenum[5] = dicecopy[1];

break;

case 3:

dicenum[0] = dicecopy[2];

dicenum[2] = dicecopy[4];

dicenum[4] = dicecopy[5];

dicenum[5] = dicecopy[0];

break;

case 4:

dicenum[0] = dicecopy[5];

dicenum[2] = dicecopy[0];

dicenum[4] = dicecopy[2];

dicenum[5] = dicecopy[4];

break;

}

}

bool mapmove(int i) {

int temp_x;

int temp_y;


switch (cmd[i]) {

case 1:

temp_x = x;

temp_y = y+1;

break;

case 2:

temp_x = x;

temp_y = y-1;

break;

case 3:

temp_x = x-1;

temp_y = y;

break;

case 4:

temp_x = x+1;

temp_y = y;

break;

}

if (temp_x >= 0 && temp_x <= n - 1 && temp_y >= 0 && temp_y <= m - 1) {

x = temp_x;

y = temp_y;

return true;

}

return false;

}


void changedice() {

if (arr[x][y] == 0)

arr[x][y] = dicenum[5];

else {

dicenum[5] = arr[x][y];

arr[x][y] = 0;

}

}


int main(void) {

cin >> n >> m >> x >> y >> k;

for (int i = 0; i < n; i++) {

for (int j = 0; j < m; j++) {

cin >> arr[i][j];

}

}

for (int i = 0; i < k; i++)

cin >> cmd[i];

memset(dicenum, 0, sizeof(dicenum));

for (int i = 0; i < k; i++) {

if (mapmove(i)) {

dicemove(i);

changedice();

cout << dicenum[2] << endl;

}

else

continue;

}

return 0;

}

'백준 알고리즘 > 시뮬레이션' 카테고리의 다른 글

백준 3190 C++  (0) 2019.04.07
백준 3190번 C++  (0) 2019.01.29
백준 14503번 C++  (0) 2019.01.26
백준 1547 파이썬  (0) 2018.11.13
백준 10219 파이썬  (0) 2018.11.12