반응형

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

 

1. 문제설명

주사위를 굴려서 이동시키는 과정을 잘 구현하는게 핵심인 문제다.

 

  2
4 1 3
  5
  6

문제에서 주는 이 전개도를 잘 관찰해야 한다.

 

 

백준 14499번

이렇게 주사위가 있을 때

주사위는 6칸이므로 6칸에 어떤 숫자가 저장되는지

int 배열 arr[6]에 해당 면에 있는 숫자를 저장할 수 있다.

 

항상 맨윗면은 1번, 동쪽을 보는 면은 3번 이런식으로 주사위의 면을 고정한 채로

주사위를 굴리는 행위를 할 때마다

각 면에 저장된 숫자를 서로 바꿔주면 주사위를 굴리는 행위를 구현할 수 있다.

 

    [2]
     0  
[4] [1] [3] [6]
 0   0   0   0
    [5]
     0
    [6]
     0

위 전개도를 기준으로 주사위의 배열 방이 [1]번부터 [6]까지 있고

그 안에 해당하는 값이 있으면

주사위를 굴릴 때마다 해당 값들을 바꿔주면 된다.

 

[6]번은 주사위의 아랫면에 해당하므로

동서로 굴릴 때나 남북으로 굴릴때나 변환되어야 한다.

 

 


 

2.문제풀이코드 C++

#include <bits/stdc++.h>
using namespace std;

int n, m, x, y, k;
int arr[21][21];
int dice[7];

void copy_ground() {
	if (arr[x][y] == 0) {
		arr[x][y] = dice[6];
	}
	else {
		dice[6] = arr[x][y];
		arr[x][y] = 0;
	}

	cout << dice[1] << '\n';
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n >> m >> x >> y >> k;

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

	int order;
	for (int i = 0; i < k; i++) {
		cin >> order;

		if (order == 1) {
			if (y + 1 < m) {
				y++;
				int tmp = dice[1];
				dice[1] = dice[4];
				dice[4] = dice[6];
				dice[6] = dice[3];
				dice[3] = tmp;
				copy_ground();
			}
		}
		else if (order == 2) {
			if (y - 1 >= 0) {
				y--;
				int tmp = dice[1];
				dice[1] = dice[3];
				dice[3] = dice[6];
				dice[6] = dice[4];
				dice[4] = tmp;
				copy_ground();
			}
		}
		else if (order == 3) {
			if (x - 1 >= 0) {
				x--;
				int tmp = dice[2];
				dice[2] = dice[1];
				dice[1] = dice[5];
				dice[5] = dice[6];
				dice[6] = tmp;
				copy_ground();
			}
		}
		else if (order == 4) {
			if (x + 1 < n) {
				x++;

				int tmp = dice[1];
				dice[1] = dice[2];
				dice[2] = dice[6];
				dice[6] = dice[5];
				dice[5] = tmp;
				copy_ground();
			}
		}
	}


	return 0;
}

백준 14499번

 

반응형

+ Recent posts