#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에 대해서 정의하면 끝.