본문 바로가기
카테고리 없음

[알고리즘] 주사위 굴리기

by keel_im 2020. 10. 13.
반응형

포인트

  • 주사위를 잘 만들 수 있는가?
  • 굴렸을 때 규칙을 잘 만들면 된다. 
  • (맵 크기, 주사위 위치, 명령 수 입력) -> (맵 입력) ->(명령에 따른 주사위 굴리기)

🧶문서는 항상 수정 될 수 있습니다. 비판은 환영합니다. 

c++/cpp

#include <iostream>

using namespace std;

int map[20][20];
int dice[7];
int dx[] = {0, 0, -1, 1};
int dy[] = {1, -1, 0, 0};

int main() {
	int n, m, x, y, k;
	cin >> n >> m >> x >> y >> k;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < m; j++)
			cin >> map[i][j];

	while (k--) {
		int a;
		cin >> a;
		--a;
		int nx = x + dx[a];
		int ny = y + dy[a];
		if (nx < 0 || nx >= n || ny < 0 || ny >= m) continue;
		// 바깥으로 이동시키려고 하는 경우에는 해당 명령을 무시해야 함, 출력도 하면 안됨

		if (a == 0) {
			// right
			swap (dice[1], dice[4]);
			swap (dice[4], dice[6]);
			swap (dice[6], dice[3]);
			
		}
		else if (a == 1) {
			// left

			swap (dice[1], dice[3]);
			swap (dice[3], dice[6]);
			swap (dice[6], dice[4]);
		}
		else if (a == 2) {
			// up
			swap (dice[1], dice[5]);
			swap (dice[5], dice[6]);
			swap (dice[6], dice[2]);
		}
		else {
			// down
			swap (dice[1], dice[2]);
			swap (dice[2], dice[6]);
			swap (dice[6], dice[5]);
		}

		x = nx;
		y = ny;

		if (map[x][y] == 0) map[x][y] = dice[6];

		else {
			dice[6] = map[x][y];
			map[x][y] = 0;
		}
		cout << dice[1] << '\n';
	}
	return 0;
}

python

n, m, x, y, k = map(int, input().split())
data = [list(map(int, input().split())) for _ in range(n)]
dice = [0] * 7

command = list(map(int, input().split()))

dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]

for ele in command:
    ele -= 1
    nx, ny = x + dx[ele], y + dy[ele]
    if not (0 <= nx < n and 0 <= ny < m):
        continue

    if ele == 0:
        dice[1], dice[4] = dice[4], dice[1]
        dice[4], dice[6] = dice[6], dice[4]
        dice[6], dice[3] = dice[3], dice[6]
    elif ele == 1:
        # 4053
        # 0534
        dice[1], dice[3] = dice[3], dice[1]
        dice[3], dice[6] = dice[6], dice[3]
        dice[6], dice[4] = dice[4], dice[6]

    elif ele == 2:
        dice[1], dice[5] = dice[5], dice[1]
        dice[5], dice[6] = dice[6], dice[5]
        dice[6], dice[2] = dice[2], dice[6]
    elif ele == 3:
        dice[1], dice[2] = dice[2], dice[1]
        dice[2], dice[6] = dice[6], dice[2]
        dice[6], dice[5] = dice[5], dice[6]

    x, y = nx, ny

    if data[nx][ny] == 0:
        data[nx][ny] = dice[6]
    else:
        dice[6] = data[x][y]
        data[nx][ny] = 0

    print(dice[1])
반응형

댓글