반응형
이 문제는 지도 위에서 주사위는 동(1), 서(2), 북(3), 남(4) 방향으로 굴릴 때 주사위의 윗면의 수를 출력해야 합니다
가장 중점적으로 봐야할 점은 주사위를 4방향으로 굴릴 때, 각 위치가 어떻게 변하는지입니다.
따라서 저는 0부터 5까지 바닥, 동, 서, 남, 북, 위를 설정하고, 4방향으로 굴릴 때의 위치 변화를 저장하는 배열을 만들었습니다.
가장 먼저 각 명령마다 지도의 범위를 벗어나는지 체크합니다. 범위 밖일 때는 아무 행동도 하지 않아야 합니다.
주사위를 굴릴 수 있다면 위와 같이 주사위의 상태를 바꾸고, 지도가 0인지에 따라 상황에 맞는 처리를 해주면 됩니다.
또한 초기 x, y 좌표 값도 올바르게 설정해주면 됩니다!
import java.io.*;
import java.util.*;
public class Main {
static int N, M, x, y;
static int[][] map;
static int[] dice;
static int[] dx = { 1, -1, 0, 0 }, dy = { 0, 0, -1, 1 }; // 동 서 북 남
static int[][] dd = {
// 바닥 동 서 남 북 위
{ 1, 5, 0, 3, 4, 2 }, // 동
{ 2, 0, 5, 3, 4, 1 }, // 서
{ 4, 1, 2, 0, 5, 3 }, // 북
{ 3, 1, 2, 5, 0, 4 } }; // 남
static int moveDice(int command) {
int nx = x + dx[command];
int ny = y + dy[command];
if (nx < 0 || nx >= M || ny < 0 || ny >= N) return -1;
x = nx; y = ny;
int[] copy = new int[6];
for (int i = 0; i < 6; i++) copy[i] = dice[dd[command][i]];
dice = copy.clone();
if (map[y][x] == 0) map[y][x] = dice[0];
else {
dice[0] = map[y][x];
map[y][x] = 0;
}
return dice[5];
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
StringBuilder sb = new StringBuilder();
N = Integer.parseInt(st.nextToken()); // 가로
M = Integer.parseInt(st.nextToken()); // 세로
y = Integer.parseInt(st.nextToken()); // 북에서 떨어진 위치
x = Integer.parseInt(st.nextToken()); // 서에서 떨어진 위치
int K = Integer.parseInt(st.nextToken());
dice = new int[6];
map = new int[N][M];
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < M; j++)
map[i][j] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int command, answer;
for (int i = 0; i < K; i++) {
command = Integer.parseInt(st.nextToken());
answer = moveDice(command - 1);
if (answer == -1) continue;
else sb.append(answer).append("\n");
}
System.out.println(sb);
br.close();
}
}
반응형
'All Categories > Algorithm' 카테고리의 다른 글
BOJ 백준 28069번 김밥천국의 계단 Java (0) | 2023.10.02 |
---|---|
[BOJ 백준] 2531번 회전초밥 (Java) (0) | 2023.10.01 |
[SWEA] 1953. [모의 SW 역량테스트] 탈주범 검거 (Java) (0) | 2023.05.24 |
[Softeer] 장애물 인식 프로그램 (Java) (0) | 2023.05.10 |
[BOJ 백준] 2031번 가스관 (Java) (0) | 2023.05.06 |