2021년09월03일_14499주사위굴리기
본문 바로가기
알고리즘 모음집/New 알고리즘

2021년09월03일_14499주사위굴리기

by KyeongMin 2021. 9. 3.
728x90
반응형
#include<stdio.h>
#include<vector>
#include<string.h>
using namespace std;
#define S 21
struct pos {
	int y, x, dir;
}cube;
int N, M, K;
int cubeNum[7];
int map[S][S];
int dy[] = {0,0,0,-1,1 };
int dx[] = {0,1,-1,0,0 };
bool safe(int y, int x);
void init();
void init_test();
void moveCube(int dir);
void play();
int main(void) {
	init();
	play();
	return 0;
}
void play() {
	for (int k = 0; k < K; k++) {
		int dir;
		scanf("%d", &dir);
		if (!safe(cube.y + dy[dir], cube.x + dx[dir]))continue;
		moveCube(dir);
		if (map[cube.y + dy[dir]][cube.x + dx[dir]] == 0) {
			map[cube.y + dy[dir]][cube.x + dx[dir]] = cubeNum[6];
		}
		else if (map[cube.y + dy[dir]][cube.x + dx[dir]] != 0) {//숫자가 있는 경우
			cubeNum[6] = map[cube.y + dy[dir]][cube.x + dx[dir]];
			map[cube.y + dy[dir]][cube.x + dx[dir]] = 0;
		}
		printf("%d\n", cubeNum[1]);
		cube.y += dy[dir], cube.x += dx[dir];
	}
}
void init() {
	memset(cubeNum, 0, sizeof(cubeNum));
	memset(map, 0, sizeof(map));
	scanf("%d %d %d %d %d",&N,&M,&cube.y,&cube.x,&K);
	for (int i = 0; i < N; i++) {
		for (int j = 0; j < M; j++) {
			scanf("%d", &map[i][j]);
		}
	}
	//init_test();
}
bool safe(int y, int x) {
	return 0 <= y && y < N && 0 <= x && x < M;
}
void moveCube(int dir) {
	if (dir == 1) {
		int copyNum = cubeNum[1];
		cubeNum[1] = cubeNum[4];
		cubeNum[4] = cubeNum[6];
		cubeNum[6] = cubeNum[3];
		cubeNum[3] = copyNum;
	}
	if (dir == 2) {
		int copyNum = cubeNum[1];
		cubeNum[1] = cubeNum[3];
		cubeNum[3] = cubeNum[6];
		cubeNum[6] = cubeNum[4];
		cubeNum[4] = copyNum;
	}
	if (dir == 3) {
		int copyNum = cubeNum[1];
		cubeNum[1] = cubeNum[5];
		cubeNum[5] = cubeNum[6];
		cubeNum[6] = cubeNum[2];
		cubeNum[2] = copyNum;
	}
	if (dir == 4) {
		int copyNum = cubeNum[1];
		cubeNum[1] = cubeNum[2];
		cubeNum[2] = cubeNum[6];
		cubeNum[6] = cubeNum[5];
		cubeNum[5] = copyNum;
	}
}
void init_test() {
	if (N != 4||M!=2||cube.y!=0||cube.x!=0||K!=8) {
		printf("틀림\n");
	}
	int testMap[4][2] = {
		{0,2},{3,4},{5,6},{7,8}
	};
	for (int i = 0; i < 4; i++) {
		for (int j = 0; j < 2; j++) {
			if (map[i][j] != testMap[i][j])
			{
				printf("틀림\n");

			}
		}
	}
}

설계 과정

  • 주사위를 평면도로 어떻게 할지와 동그라미 부분이 포인트 주사위 이동시 어떻게 바뀌는지
  • 이번에 실수 한 것은 오타실수가 있었음
  • 그것 말고는 설계를 완벽히 함
  • 시뮬레이션은 정말 하라는대로 해야하고 내 생각이 개입되면 안됨
  • 정말 중요함

백준주사위던지기

 

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

https://github.com/3DPIT/AlgorithmFinal/blob/main/02.algorithmStudy/0903/01.14499-%EC%A3%BC%EC%82%AC%EC%9C%84%EA%B5%B4%EB%A6%AC%EA%B8%B0/2021%EB%85%8409%EC%9B%9403%EC%9D%BC_14499%EC%A3%BC%EC%82%AC%EC%9C%84%EA%B5%B4%EB%A6%AC%EA%B8%B0.md

 

728x90
반응형

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

2021년09월06일_15683-감시  (0) 2021.09.06
2021년09월04일_14503-로봇청소기  (0) 2021.09.04
2021년09월02일_3190-뱀  (0) 2021.09.02
13460_구슬탈출2  (0) 2021.09.01
2021년08월04일_16953-A->B  (0) 2021.08.07

댓글