티스토리 뷰

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개의 줄에 지도에 쓰여 있는 수가 북쪽부터 남쪽으로, 각 줄은 서쪽부터 동쪽 순서대로 주어진다. 주사위를 놓은 칸에 쓰여 있는 수는 항상 0이다. 지도의 각 칸에 쓰여 있는 수는 10을 넘지 않는 자연수 또는 0이다. 마

www.acmicpc.net

#include<iostream>
#include<vector>

using namespace std;

int direct[5][2] = { {0,0},{0,1},{0,-1},{-1,0},{1,0} };
int N, M, x, y, K;		//지도크기 N, M / 주사위 좌표 x, y / 명령의 개수 K
int dice[7] = { 0 };	//주사위 (0무시, 1 2 3 4 5 6)

vector<vector<int>> map;

int main(void) {
	vector<int> result;
	//입력
	cin >> N >> M >> x >> y >> K;

	for (int i = 0; i < N; i++) {
		vector<int> temp;
		for (int j = 0; j < M; j++) {
			int t;
			cin >> t;
			temp.push_back(t);
		}
		map.push_back(temp);
	}

	//초기상태 셋팅
	int up = 1, e = 3, w = 4, s = 5, n = 2, down = 6;	//주사위 상태

	int order;	//이동명령 : 동쪽 1 / 서쪽 2 / 북쪽 3 / 남쪽 4
	for (int i = 0; i < K; i++) {
		cin >> order;

		//위치이동 명령
		int tx = x + direct[order][0];
		int ty = y + direct[order][1];

		//이동 후 주사위가 맵안에 존재하는, 유효한 명령일 경우
		if (0 <= tx && tx < N && 0 <= ty && ty < M) {
			x = tx;	//위치 이동
			y = ty;	//위치 이동

			//이동 전 주사위 상태 임시저장
			int tup = up, te = e, tw = w, ts = s, tn = n, tdown = down;

			//명령의 종류에 따른 주사위 상태 변환
			if (order == 1) {
				up = tw;	down = te; e = tup; w = tdown;
			}
			if (order == 2) {
				up = te; down = tw; e = tdown; w = tup;
			}
			if (order == 3) {
				up = ts; down = tn; s = tdown; n = tup;
			}
			if (order == 4) {
				up = tn; down = ts; s = tup; n = tdown;
			}

			//이동한 칸의 숫자가 0이면 주사위 바닥면의 숫자를 칸에 복사
			//이동한 칸의 숫자가 0이 아니면 칸의 숫자를 주사위 바닥면에 복사, 칸은 0으로
			if (map[x][y] == 0) {
				map[x][y] = dice[down];
			}
			else {
				dice[down] = map[x][y];
				map[x][y] = 0;
			}
			//각 상태에서 주사위 윗면의 숫자(정답) 입력
			result.push_back(dice[up]);
		}
		else {
			continue;	//유효한 명령이 아니라면 무시
		}
	}

	//정답 출력
	for (int i = 0; i < result.size(); i++)
		cout << result[i] << endl;
}
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함