※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 14499번 문제인 주사위 굴리기이다.
문제는 아래 링크를 확인하자.

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

다음과 같은 점들을 제대로 구현하자.

1. 주사위를 주어진 방향으로 굴릴 수 있는가를 확인

2. 주사위를 각 방향별로 굴렀을 때의 주사위의 면의 변화(주사위의 여섯 면의 숫자의 변화)

3. 이동한 칸에서의 주사위와 바닥의 상호작용 두가지(바닥이 0인 경우, 0이 아닌 경우)

 

헷갈리는 사람이 많아보여 서술해두면, 문제에서 좌표 (a,b)는 북쪽에서 a칸, 서쪽에서 b칸 떨어진 칸이라는 뜻이라고 명시했으므로 (x,y) 또한 북쪽에서 x칸, 서쪽에서 y칸 떨이진 칸이라는 의미이다.

 

아래는 제출한 소스코드이다.

#include <iostream>
#include <algorithm>
using namespace std;

int die[7];
int dieR, dieC;
int R, C, K;
int board[20][20];

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> R >> C >> dieR >> dieC >> K;
	for (int r = 0; r < R; r++) {
		for (int c = 0; c < C; c++) cin >> board[r][c];
	}

	while (K--) {
		int x; cin >> x;
		if (x == 1) {
			if (dieC + 1 < C) {
				dieC++;
				swap(die[1], die[3]);
				swap(die[1], die[6]);
				swap(die[1], die[4]);
				cout << die[1] << '\n';
				if (board[dieR][dieC]) {
					die[6] = board[dieR][dieC];
					board[dieR][dieC] = 0;
				}
				else board[dieR][dieC] = die[6];
			}
		}
		else if (x == 2) {
			if (dieC > 0) {
				dieC--;
				swap(die[1], die[4]);
				swap(die[1], die[6]);
				swap(die[1], die[3]);
				cout << die[1] << '\n';
				if (board[dieR][dieC]) {
					die[6] = board[dieR][dieC];
					board[dieR][dieC] = 0;
				}
				else board[dieR][dieC] = die[6];
			}
		}
		else if (x == 3) {
			if (dieR > 0) {
				dieR--;
				swap(die[1], die[2]);
				swap(die[1], die[6]);
				swap(die[1], die[5]);
				cout << die[1] << '\n';
				if (board[dieR][dieC]) {
					die[6] = board[dieR][dieC];
					board[dieR][dieC] = 0;
				}
				else board[dieR][dieC] = die[6];
			}
		}
		else {
			if (dieR + 1 < R) {
				dieR++;
				swap(die[1], die[5]);
				swap(die[1], die[6]);
				swap(die[1], die[2]);
				cout << die[1] << '\n';
				if (board[dieR][dieC]) {
					die[6] = board[dieR][dieC];
					board[dieR][dieC] = 0;
				}
				else board[dieR][dieC] = die[6];
			}
		}
	}
}
728x90

'BOJ' 카테고리의 다른 글

[BOJ 24725 // C++] 엠비티아이  (0) 2022.07.10
[BOJ 15233 // C++] Final Score  (0) 2022.07.10
[BOJ 17773 // C++] Fortune Telling  (0) 2022.07.09
[BOJ 1637 // C++] 날카로운 눈  (0) 2022.07.08
[BOJ 1646 // C++] 피이보나치 트리  (0) 2022.07.07

+ Recent posts