No Rules Rules

주사위 굴리기 (feat. 백준, 14499번) 본문

생활/코테

주사위 굴리기 (feat. 백준, 14499번)

개발하는 완두콩 2022. 7. 24. 18:32
728x90
반응형

주사위 굴리기
https://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

반응형
// woohyeon.kim
#include <iostream>
#include <queue>

using namespace std;

int N, M, K;
int maps[21][21];
int dx[4], dy[4];
int dice[4][3];
int tmp_dice[4][3];
int cmd[1001];

void turn_dice(const int& direction)
{
	for (auto ix = 0; ix < 4; ++ix)
	{
		for (auto iy = 0; iy < 3; ++iy)
			tmp_dice[ix][iy] = dice[ix][iy];
	}

	if (direction == 1)					// 동쪽
	{
		dice[1][0] = tmp_dice[3][1], dice[1][1] = tmp_dice[1][0], dice[1][2] = tmp_dice[1][1], dice[3][1] = tmp_dice[1][2];
	}
	else if (direction == 2)			// 서쪽
	{
		dice[1][0] = tmp_dice[1][1], dice[1][1] = tmp_dice[1][2], dice[1][2] = tmp_dice[3][1], dice[3][1] = tmp_dice[1][0];
	}
	else if (direction == 3)			// 북쪽
	{
		dice[0][1] = tmp_dice[1][1], dice[1][1] = tmp_dice[2][1], dice[2][1] = tmp_dice[3][1], dice[3][1] = tmp_dice[0][1];
	}
	else								// 남쪽
	{
		dice[0][1] = tmp_dice[3][1], dice[1][1] = tmp_dice[0][1], dice[2][1] = tmp_dice[1][1], dice[3][1] = tmp_dice[2][1];
	}
}

void bfs(int x, int y)
{
	for(auto idx = 0; idx < K; ++idx)
	{
		auto& direction = cmd[idx];
		auto nx = x + dx[direction - 1], ny = y + dy[direction - 1];
		if (0 <= nx && nx < N && 0 <= ny && ny < M)
		{
			turn_dice(direction);
			x = nx, y = ny;
			if (maps[x][y] == 0)
				maps[x][y] = dice[3][1];
			else
				dice[3][1] = maps[x][y], maps[x][y] = 0;
			cout << dice[1][1] << endl;
		}
	}
}

int main()
{
	dx[0] = 0, dx[1] = 0, dx[2] = -1, dx[3] = 1;
	dy[0] = 1, dy[1] = -1, dy[2] = 0, dy[3] = 0;
	
	auto x = 0, y = 0;
	cin >> N >> M >> x >> y >> K;
	for (auto ix = 0; ix < N; ++ix)
	{
		for (auto iy = 0; iy < M; ++iy)
			cin >> maps[ix][iy];
	}
	for (auto idx = 0; idx < K; ++idx)
		cin >> cmd[idx];

	for (auto ix = 0; ix < 4; ++ix)
	{
		for (auto iy = 0; iy < 3; ++iy)
			dice[ix][iy] = 0;
	}

	bfs(x, y);
}
// *&)*@*

동서남북 으로 주사위가 이동할때, 각 면마다의 변경되는 정보만 미리 define하면 되는 간단한 문제입니다.

728x90
반응형

'생활 > 코테' 카테고리의 다른 글

감시 (feat.백준, 15683번)  (0) 2022.07.24
톱니바퀴 (feat. 백준, 14891번)  (0) 2022.07.24
퇴사 (feat. 백준, 14501번)  (0) 2022.07.24
2048 (Easy) (feat. 백준, 12100번)  (0) 2022.07.24
구슬 탈출 2 (feat. 백준, 13460번)  (0) 2022.07.24
Comments