본문 바로가기
Programming/Algorithm

백준 14499 주사위 굴리기

by OKOK 2017. 10. 20.

#include <iostream>

#include <algorithm>


using namespace std;


int n, m, x, y, k, nx, ny;

int map[20][20], karray[1001], dice[5];

int dx[4] = { 0, 0, -1, 1 }; // East, West, North, South

int dy[4] = { 1, -1, 0, 0 };


void dice_move(int d) {

switch (d) {

case 0: // East

swap(dice[1], dice[2]);

swap(dice[4], dice[5]);

swap(dice[2], dice[5]);

break;

case 1: // West

swap(dice[4], dice[5]);

swap(dice[1], dice[2]);

swap(dice[1], dice[4]);

break;

case 2: // North

swap(dice[4], dice[0]);

swap(dice[1], dice[3]);

swap(dice[0], dice[3]);

break;

case 3: // South

swap(dice[0], dice[4]);

swap(dice[1], dice[3]);

swap(dice[1], dice[4]);

break;

}

}


void input() {

scanf("%d %d %d %d %d", &n, &m, &x, &y, &k);

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

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

scanf("%d", &map[i][j]);

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

scanf("%d", &karray[i]);

}


void solve() {


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

nx = x + dx[karray[i] - 1];

ny = y + dy[karray[i] - 1];


if (nx < 0 || ny < 0 || nx >= n || ny >= m) continue;


dice_move(karray[i] - 1);


if (map[nx][ny] == 0) {

map[nx][ny] = dice[4];

}


else {

dice[4] = map[nx][ny];

map[nx][ny] = 0;

}

printf("%d\n", dice[1]);


x = nx;

y = ny;


}


}


int main() {

input();

solve();

return 0;


맵을 작성, karray에 명령어 넣기, 그리고 dice는 주사위를 나타내기

dice_move 는 주사위의 변동에 따라서 변동되는 것 나타내기

input 함수 받기.


solve 를 풀어나가기.

for문을 돌리리기 그게 전부입니다.

nx, ny는 명령어에 따라서 움직이기,

이때 맵을 벗어나는지 확인하고, 넘어간다면 명령어를 무시 continue 작성

그리고 주사위를 굴리기.

맵이 0 일때와 맵이 ㅇ0이 아닐때 나누기.

그리고 dice[1] 이 위를 의미하므로 이것을 프린트 하기.

그리고 새로운 x, y에 대해서 정의하면  끝.