티스토리 뷰

백준

백준 소스코드 [C++] 14499 주사위 굴리기

Hani_Levenshtein 2021. 2. 4. 09:28

www.acmicpc.net/problem/14499

 

14499번: 주사위 굴리기

첫째 줄에 지도의 세로 크기 N, 가로 크기 M (1 ≤ N, M ≤ 20), 주사위를 놓은 곳의 좌표 x y(0 ≤ x ≤ N-1, 0 ≤ y ≤ M-1), 그리고 명령의 개수 K (1 ≤ K ≤ 1,000)가 주어진다. 둘째 줄부터 N개의 줄에 지도

www.acmicpc.net

백준 소스코드 [C++] 14499 주사위 굴리기

#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;

int n, m, y, x, k,dir;
int arr[22][22];
int dx[5] = { 0,1,-1,0,0 };
int dy[5] = { 0,0,0,-1,1 };
int dice[6] = { 0,0,0,0,0,0 };

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cin >> n >> m >> y >> x >> k;
	memset(arr, -1, sizeof(arr));
	for (int i = 1;i <= n;i++)for (int j = 1;j <= m;j++) cin >> arr[i][j];
	y++, x++;

	while (k--) {
		cin >> dir;
		if (arr[y + dy[dir]][x + dx[dir]] == -1) continue;
		y = y + dy[dir], x = x + dx[dir];

		if (dir == 1) {
			int temp = dice[0];
			dice[0] = dice[4];
			dice[4] = dice[2];
			dice[2] = dice[5];
			dice[5] = temp;
		}
		else if (dir == 2) {
			int temp = dice[0];
			dice[0] = dice[5];
			dice[5] = dice[2];
			dice[2] = dice[4];
			dice[4] = temp;
		}
		else if (dir == 3) {
			int temp = dice[0];
			dice[0] = dice[1];
			dice[1] = dice[2];
			dice[2] = dice[3];
			dice[3] = temp;
		}
		else if (dir == 4) {
			int temp = dice[0];
			dice[0] = dice[3];
			dice[3] = dice[2];
			dice[2] = dice[1];
			dice[1] = temp;
		}

		if (arr[y][x] == 0)arr[y][x] = dice[2];
		else {
			dice[2] = arr[y][x];
			arr[y][x] = 0;
		}
		cout << dice[0] << '\n';
	}

	return 0;
}
댓글