14499번 주사위 굴리기

동도리동·2021년 10월 8일
0

코딩테스트

목록 보기
55/76

이전에 어렵게 풀었었던 16939번 222 큐브와 비슷하다.
움직였을때 주사위의 위치를 일일이 바꿔주었다.

#include <iostream>
#include <vector>

using namespace std;
int map[20][20];
int n, m, a, b, k;
int square[7];
int dx[4] = { 0,0,-1,1 };
int dy[4] = { 1,-1,0,0 };
void go(int nx,int ny,int dir) {
	if (dir == 0) {
		int temp = square[3];
		square[3] = square[1];
		square[1] = square[4];
		square[4] = square[6];
		square[6] = temp;
	}
	else if (dir == 1) {
		int temp = square[3];
		square[3] = square[6];
		square[6] = square[4];
		square[4] = square[1];
		square[1] = temp;
	}
	else if (dir == 2) {
		int temp = square[1];
		square[1] = square[5];
		square[5] = square[6];
		square[6] = square[2];
		square[2] = temp;
	}
	else {
		int temp = square[1];
		square[1] = square[2];
		square[2] = square[6];
		square[6] = square[5];
		square[5] = temp;
	}
	cout << square[1] << '\n';
}
int main() {	
	//freopen("in1.txt", "rt", stdin);
	cin >> n >> m >> a >> b >> k;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> map[i][j];
		}
	}
	int move = 0;
	while (k--) {
		cin >> move;
		move--;
		int nx = a + dx[move];
		int ny = b + dy[move];
		if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
		
		go(nx,ny,move);
		if (map[nx][ny] == 0) map[nx][ny] = square[6];
		else {
			square[6] = map[nx][ny];
			map[nx][ny] = 0;
		}
		a = nx; b = ny;

	}

	return 0;
}
profile
긍정코딩세상

0개의 댓글

관련 채용 정보