뮁이의 개발새발

[JAVA] 백준 14499 주사위 굴리기 본문

Algorithm

[JAVA] 백준 14499 주사위 굴리기

뮁뮁이 2021. 11. 8. 00:18

주사위 전개도가 1번의 상태라고 하면, 동서남북으로 돌렸을때의 주사위 전개도를 생각해보며 동서남북으로 돌렸을때의 숫자 이동 함수를 만들어준다. (밑에 사진 참고) 주어진 조건대로 윗면밑면을 잘 생각해가며 구현하면 됨

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class bj14499 {

	// 0, 동 서 북 남
	static int[] dx = { 0, 0, 0, -1, 1 };
	static int[] dy = { 0, 1, -1, 0, 0 };

	static int[] temp = new int[7];
	static int[][] map;

	public static void main(String[] args) throws IOException {
		BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(in.readLine());

		int N = Integer.parseInt(st.nextToken()); // 세로크기
		int M = Integer.parseInt(st.nextToken()); // 가로크기
		int x = Integer.parseInt(st.nextToken()); // 주사위 좌표 x
		int y = Integer.parseInt(st.nextToken()); // 주사위 좌표 y
		int K = Integer.parseInt(st.nextToken()); // 명령 개수

		map = new int[N][M];

		for (int i = 0; i < N; i++) {
			st = new StringTokenizer(in.readLine());
			for (int j = 0; j < M; j++) {
				map[i][j] = Integer.parseInt(st.nextToken());
			}
		}

		StringBuilder sb = new StringBuilder();

		// 명령 수행
		st = new StringTokenizer(in.readLine());
		for (int i = 0; i < K; i++) {
			int s = Integer.parseInt(st.nextToken()); // 이동 명령

			// 새좌표 이동
			int nx = x + dx[s];
			int ny = y + dy[s];

			// 범위 넘은 경우
			if (nx < 0 || ny < 0 || nx >= N || ny >= M) {
				continue;
			}

			// 주사위를 해당 방향으로 돌림
			rolldice(s);

			if (map[nx][ny] == 0) { // 지도에 써있는게 0인 경우
				map[nx][ny] = temp[6]; // 지도 에 복사
			} else {
				temp[6] = map[nx][ny]; // 주사위 에 복사
				map[nx][ny] = 0; //지도 숫자 0으로 바꿔줘야함
			}

			// 현 좌표 반영해줌
			x = nx;
			y = ny;
			sb.append(temp[1] + "\n");
		}
		System.out.println(sb);

	}

	static void rolldice(int n) {
		int[] t = temp.clone();

		if (n == 1) { // 동
			temp[1] = t[4];
			temp[3] = t[1];
			temp[4] = t[6];
			temp[6] = t[3];
		} else if (n == 2) { // 서
			temp[1] = t[3];
			temp[3] = t[6];
			temp[4] = t[1];
			temp[6] = t[4];
		} else if (n == 3) { // 북
			temp[1] = t[5];
			temp[2] = t[1];
			temp[5] = t[6];
			temp[6] = t[2];
		} else if (n == 4) { // 남
			temp[1] = t[2];
			temp[2] = t[6];
			temp[5] = t[1];
			temp[6] = t[5];
		}

	}

}

 

Comments