3085 사탕게임
본문 바로가기
알고리즘 모음집/New 알고리즘

3085 사탕게임

by KyeongMin 2021. 2. 19.
728x90
반응형
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
using namespace std;
#define NS 21
#define MS 21
int dy[] = { 0,0,0,-1,1 };//이동할 위치 좌표 저장배열 
int dx[] = { 0,1,-1,0,0 };
//0 : 정지, 1 : 동, 2 : 서, 3 : 북, 4 : 남 
int N, M;//배열의 크기 N,M
int cy, cx;//주사위 위치 좌표
int k;//이동 횟수
int ret;//결과값 저장 변수
int cube[] = { 0,0,0,0,0,0,0 };//주사위 값
int board[NS][MS] = { 0, };// 주사위가 이동하는 배열
bool safe(int y, int x) {// 범위 확인 하기위한 함수
	return 0 <= y && y < N && 0 <= x && x < M;
}
void init_input() {//초기화 및 입력 
	memset(cube, 0, sizeof(cube));
	memset(board, 0, sizeof(board));
	cy = cx = N = M = ret = 0;
	scanf("%d %d %d %d %d", &N, &M,&cy,&cx,&k);
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			scanf("%d", &board[i][j]);
		}
	 }	
}
void simulation() {// 주사위 이동 시작 
	for (int ki = 0; ki < k; ki++) {
		int num = 0;// 주사위 방향 변수
		scanf("%d", &num);
		if (num == 1&&safe(cy+dy[num],cx+dx[num])) {//방향 동쪽이고 움직일 수 있는 공간이라면
			cy = cy + dy[num]; cx = cx + dx[num];
			if (board[cy][cx] != 0) {
				cube[3] = board[cy][cx];
				board[cy][cx] = 0;
			}
			else if (board[cy][cx] == 0) {
				board[cy][cx] = cube[3];
			}
			int copyCube = cube[3];
			cube[3] = cube[1]; cube[1] = cube[4]; cube[4] = cube[6]; cube[6] = copyCube;
			printf("%d\n", cube[1]);//위에 숫자 출력
		}
		if (num == 2 && safe(cy + dy[num], cx + dx[num])) {//방향 서쪽이고 움직일 수 있는 공간이라면
			cy = cy + dy[num]; cx = cx + dx[num];
			if (board[cy][cx] != 0) {
				cube[4] = board[cy][cx];
				board[cy][cx] = 0;
			}
			else if (board[cy][cx] == 0) {
				board[cy][cx] = cube[4];
			}
			int copyCube = cube[4];
			cube[4] = cube[1]; cube[1] = cube[3];  cube[3] = cube[6]; cube[6] = copyCube;
			printf("%d\n", cube[1]);//위에 숫자 출력
		}
		if (num == 3 && safe(cy + dy[num], cx + dx[num])) {//방향 북쪽이고 움직일 수 있는 공간이라면
			cy = cy + dy[num]; cx = cx + dx[num];
			if (board[cy][cx] != 0) {
				cube[2] = board[cy][cx];
				board[cy][cx] = 0;
			}
			else if (board[cy][cx] == 0) {
				board[cy][cx] = cube[2];
			}
			int copyCube = cube[2];
			cube[2] = cube[1]; cube[1] = cube[5]; cube[5] = cube[6]; cube[6] = copyCube;
			printf("%d\n", cube[1]);//위에 숫자 
		}
		if (num == 4 && safe(cy + dy[num], cx + dx[num])) {//방향 남쪽이고 움직일 수 있는 공간이라면
			cy = cy + dy[num]; cx = cx + dx[num];
			if (board[cy][cx] != 0) {
				cube[5] = board[cy][cx];
				board[cy][cx] = 0;
			}
			else if (board[cy][cx] == 0) {
				board[cy][cx] = cube[5];
			}
			int copyCube = cube[6];
			cube[6] = cube[5]; cube[5] = cube[1]; cube[1] = cube[2]; cube[2] = copyCube;
			printf("%d\n", cube[1]);//위에 숫자 출력
		}
	}
}
int main(void) {
	int testCase = 1;//테스트 케이스 변수
	scanf("%d", &testCase);
	for (int tc = 1; tc <= testCase; tc++) {
		init_input();
		simulation();
	}
	return 0;
}

728x90
반응형

'알고리즘 모음집 > New 알고리즘' 카테고리의 다른 글

1722 순열의 순서  (0) 2021.02.20
1018 체스판 다시 칠하기  (0) 2021.02.20
1107 리모컨  (0) 2021.02.18
14502 연구소  (0) 2021.01.12
15686 치킨배달  (0) 2021.01.10

댓글