백준 14499번 주사위 굴리기

조항주·2022년 4월 19일
0

algorithm

목록 보기
41/50
post-thumbnail

문제

https://www.acmicpc.net/problem/14499

코드

#include <string>
#include <vector>
#include <iostream>

using namespace std;

int main() {

	int n, m, x, y, k;
	cin >> n >> m >> y >> x >> k;
	int bot = 0;
	int top = 0;
	int front = 0;
	int back = 0;
	int right = 0;
	int left = 0;
	vector<vector<int>> map(n, vector<int>(m));
	vector<int> answer;

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++)
			cin >> map[i][j];
	}

	for (int i = 0; i < k; i++) {
		int moveCmd;
		cin >> moveCmd;
		if (moveCmd == 1) {
			x++;
			if (x < m) {
				int temp=bot;
				bot = right;
				right = top;
				top = left;
				left = temp;
				if (map[y][x] == 0) {
					map[y][x] = bot;
				}
				else {
					bot = map[y][x];
					map[y][x] = 0;
				}
				answer.push_back(top);
			}
			else x--;
		}
		else if (moveCmd == 2) {
			x--;
			if (x >=0) {
				int temp = bot;
				bot = left;
				left = top;
				top = right;
				right = temp;
				if (map[y][x] == 0) {
					map[y][x] = bot;
				}
				else {
					bot = map[y][x];
					map[y][x] = 0;
				}
				answer.push_back(top);
			}
			else x++;
		}
		else if (moveCmd == 3) {
			y--;
			if (y >= 0) {
				int temp = bot;
				bot = front;
				front = top;
				top = back;
				back = temp;
				if (map[y][x] == 0) {
					map[y][x] = bot;
				}
				else {
					bot = map[y][x];
					map[y][x] = 0;
				}
				answer.push_back(top);
			}
			else y++;
		}
		else {
			y++;
			if (y <n) {
				int temp = bot;
				bot = back;
				back = top;
				top = front;
				front = temp;
				if (map[y][x] == 0) {
					map[y][x] = bot;
				}
				else {
					bot = map[y][x];
					map[y][x] = 0;
				}
				answer.push_back(top);
			}
			else y--;
		}
	}

	for (int i : answer)
		cout << i << endl;
		
}

풀이

지도의 각 칸에는 정수가 하나씩 쓰여져 있다. 주사위를 굴렸을 때, 이동한 칸에 쓰여 있는 수가 0이면, 주사위의 바닥면에 쓰여 있는 수가 칸에 복사된다. 0이 아닌 경우에는 칸에 쓰여 있는 수가 주사위의 바닥면으로 복사되며, 칸에 쓰여 있는 수는 0이 된다.

주사위를 놓은 곳의 좌표와 이동시키는 명령이 주어졌을 때, 주사위가 이동했을 때 마다 상단에 쓰여 있는 값을 구하는 프로그램을 작성하시오.

주사위는 지도의 바깥으로 이동시킬 수 없다. 만약 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 하며, 출력도 하면 안 된다.

위 조건을 지키면서 주사위를 움직이며 주사위 윗면의 값들을 차례대로 출력시키는 문제입니다.

맵은 2차원 배열로 구현을 했고 주사위는 6개의 면을 각각 하나의 변수로 만들어서 움직일때마다 값들을 바꿔주면서 윗면의 값을 저장시켰습니다.

0개의 댓글