14499.주사위 굴리기
http://www.acmicpc.net/problem/14499
주사위를 굴렸을때 상단에 위치한 값을 출력하는 시뮬레이션 문제다.
주사위의 인덱스를 고정시켜놓고 주사위를 네 방향으로 굴렸을때 각 면의 값이 어떻게 바뀌는지를 봐야한다. 먼저 주사위 배열을 정의해야한다.
dice[] = {상단, 위쪽, 오른쪽, 왼쪽, 아래쪽, 하단}
여기서 주사위를 동쪽(오른쪽)으로 굴리면 원래 왼쪽에 있던 값이 상단값이 된다. 원래 상단에 있던 값은 오른쪽값으로 바뀐다. 이런 방식으로 생각해보면 동, 서 방향으로 굴릴때는 위, 아래쪽에 있는 값은 바뀌지않는다. 또 남, 북 방향으로 굴릴 때는 왼쪽, 오른쪽 값이 바뀌지 않는다. 이처럼 각 면의 값이 어떤 값으로 바뀌는지를 보고 주사위를 굴릴때마다 갱신해주면 된다.
주사위를 굴리기 전에 전 상태를 temp에 먼저 저장하고 굴린 후에 값을 갱신해준다.
private static void rollDice(int k) { // 1:동, 2:서, 3:북, 4:남
int[] temp = new int[6];
for (int i = 0; i < 6; i++) {
temp[i] = dice[i];
}
if (k == 1) {
dice[0] = temp[3];
dice[2] = temp[0];
dice[3] = temp[5];
dice[5] = temp[2];
} else if (k == 2) {
dice[0] = temp[2];
dice[2] = temp[5];
dice[3] = temp[0];
dice[5] = temp[3];
} else if (k == 3) {
dice[0] = temp[4];
dice[1] = temp[0];
dice[4] = temp[5];
dice[5] = temp[1];
} else if (k == 4) {
dice[0] = temp[1];
dice[1] = temp[5];
dice[4] = temp[0];
dice[5] = temp[4];
}
}
'Algorithms > Baekjoon OJ' 카테고리의 다른 글
[Baekjoon]14503.로봇청소기 (0) | 2019.08.01 |
---|---|
[Baekjoon]14891.톱니바퀴 (0) | 2019.07.29 |
[Baekjoon]17070.파이프 옮기기1 (0) | 2019.07.24 |
[Baekjoon]1987.알파벳 (0) | 2019.07.16 |
[Baekjoon]14442.벽 부수고 이동하기2 (0) | 2019.07.09 |