728x90
반응형
https://www.acmicpc.net/problem/14499
어떠한 규칙이 있나? 찾아보려다가
주사위를 굴릴 때마다 주사위의 동서남북위아래가 어떻게 변하는지를 다 적어봤다.
그냥 하나하나 다 구현해놓는게 빠를것 같아서
주사위 class를 하나 만들고,
주사위 객체를 만들어 동서남북위아래에 적힌 숫자를 관리하는것이 좋을것 같았다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class P14499 {
static class Dice {
int top = 0;
int bottom = 0;
int east = 0;
int west = 0;
int south = 0;
int north = 0;
void roll_east() {
int east = this.east;
int west = this.west;
int top = this.top;
int bottom = this.bottom;
this.bottom = east;
this.top = west;
this.east = top;
this.west = bottom;
}
void roll_west() {
int east = this.east;
int west = this.west;
int top = this.top;
int bottom = this.bottom;
this.top = east;
this.bottom = west;
this.west = top;
this.east = bottom;
}
void roll_north() {
int top = this.top;
int bottom = this.bottom;
int north = this.north;
int south = this.south;
this.top = south;
this.bottom = north;
this.north = top;
this.south = bottom;
}
void roll_south() {
int top = this.top;
int bottom = this.bottom;
int north = this.north;
int south = this.south;
this.top = north;
this.bottom = south;
this.north = bottom;
this.south = top;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
int r = Integer.parseInt(st.nextToken());
int c = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[][] 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());
}
}
Dice dice = new Dice();
st = new StringTokenizer(br.readLine());
for (int i = 0; i < k; i++) {
int roll = Integer.parseInt(st.nextToken());
if (roll == 1) {
// 동
if (c >= m - 1)
continue;
c++;
dice.roll_east();
} else if (roll == 2) {
// 서
if (c <= 0)
continue;
c--;
dice.roll_west();
} else if (roll == 3) {
// 북
if (r <= 0)
continue;
r--;
dice.roll_north();
} else if (roll == 4) {
// 남
if (r >= n - 1)
continue;
r++;
dice.roll_south();
}
if (map[r][c] == 0) {
// 주사위 바닥값을 지도에 새김
map[r][c] = dice.bottom;
} else {
// 주사위의 바닥값을 지도의 값으로 변경
dice.bottom = map[r][c];
map[r][c] = 0;
}
System.out.println(dice.top);
}
}
}
코드만 길고 풀이는 쉬웠던 주사위 문제.
728x90
반응형
'코딩 > 백준-자바' 카테고리의 다른 글
[자바] 백준 Contest 참가 (0) | 2023.02.12 |
---|---|
[자바] 백준 14500번: 테트로미노 (0) | 2023.02.10 |
[자바] 백준 21661번: 다각형의 면적 (0) | 2023.02.08 |
[자바] 백준 11758번: CCW (0) | 2023.02.07 |
[자바] 백준 1915번: 가장 큰 정삼각형 (0) | 2023.02.06 |
댓글