Notice
Recent Posts
Recent Comments
Link
뮁이의 개발새발
[JAVA] 백준 14499 주사위 굴리기 본문
주사위 전개도가 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];
}
}
}
'Algorithm' 카테고리의 다른 글
[JAVA] 백준 15651 N과 M(3) (0) | 2021.11.09 |
---|---|
[JAVA] 백준 4673 셀프 넘버 (0) | 2021.11.09 |
[JAVA] 백준 5567 결혼식 (0) | 2021.10.19 |
[JAVA] 프로그래머스 로또의 최고 순위와 최저 순위 (0) | 2021.10.04 |
[JAVA] SWEA 1249 보급로 (0) | 2021.09.30 |
Comments