시나브로

14499. 주사위 굴리기 본문

알고리즘/백준

14499. 주사위 굴리기

혬혬 2020. 6. 3. 23:33
728x90

주사위를 하드코딩하지 않고 구현을 하고자 하였지만... 포기하고 주사위 돌리면서 하드코딩했습니다. 

Solution 

  1. change함수를 통해 주사위를 돌리고, 주사위의 위치를 변경해줍니다. 단 여기서 주사위 위치의 범위를 체크해줍니다. 
  2. 범위에 벗어나지 않으면, 주사위에 값을 복사하고 맞은편값을 프린트해줍니다. 

 

Key Point

주사위를 굳이 규칙을 차지 말자.... 하드코딩해도 길지 않다!! 

직접 주사위를 가지고 돌려가며 인덱스를 확인하면 쉽게 주사위를 돌릴 수 있습니다!

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<queue>
using namespace std;

#define INF 10000000
int dice[6] = { 0 };
int X=0, Y=0;
int n, m, x, y, k;
void swap(int i, int j) {
	int box = dice[i];
	dice[i] = dice[j];
	dice[j] = box;
}
int change(int si) {
	int s = dice[0];
	switch (si)
	{
	case 3://북
		if (X - 1 >= 0) X--;
		else return 0;
		dice[0] = dice[1];
		dice[1] = dice[5];
		dice[5] = dice[4];
		dice[4] = s;
		break;
	case 4://남
		if (X + 1 <n) X++;
		else return 0;
		dice[0] = dice[4];
		dice[4] = dice[5];
		dice[5] = dice[1];
		dice[1] = s;
		break;
	case 1://동
		if (Y + 1 < m) Y++;
		else return 0;
		dice[0] = dice[2];
		dice[2] = dice[5];
		dice[5] = dice[3];
		dice[3] = s;
		break;
	case 2:
		if (Y - 1 >=0) Y--;
		else return 0;
		dice[0] = dice[3];
		dice[3] = dice[5];
		dice[5] = dice[2];
		dice[2] = s;
		break;
	}
	return 1;
}

int main(void) {

	freopen("inp.inp", "r", stdin);
	freopen("out.out", "w", stdout);
	
	cin >> n >> m >> X >> Y >> k;
	int map[21][21] = { 0 };
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			cin >> map[i][j];
		}
	}
	int box = 0;
	for (int i = 0; i < k; i++) {
		cin >> box;
		if (change(box)) {
			if (map[X][Y] == 0)
				map[X][Y] = dice[5];
			else {
				dice[5] = map[X][Y];
				map[X][Y] = 0;
			}
			cout << dice[0] << endl;
		}
	}

	return 0;
}

 

 

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

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

14502 연구소  (0) 2020.06.04
14501. 퇴사  (0) 2020.06.04
13460. 구술 탈출 2  (0) 2020.06.03
13458. 시험감독  (0) 2020.06.01
1197. 최소 스패닝 트리  (0) 2020.01.17
Comments