<링크>
https://www.acmicpc.net/problem/14499
<풀이>
주사위를 하나 그려놓고 상하좌우로 굴려보며 규칙성을 찾았다.
주사위 평면도가 다음과 같으면
2면 : 배열[0]
4면 : 배열[1]
1면 : 배열[2]
3면 : 배열[3]
5면 : 배열[4]
6면 : 배열[5]
각각 면의 숫자를 배열 해당위치에 넣어준다. 처음엔 모두 0이다.
위로 굴리면 그림처럼 아랫방향으로 shift되고 4면 3면은 변화가 없다.
우측으로 굴리면 다음과 같다.
굴리는거 구현했으면 시키는 대로 하면된다.
<소스코드>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include<stdio.h> int dice[6] = { 0,0,0,0,0,0 }; int pan[20][20]; int N, M, x, y, K; void east(); void west(); void north(); void south(); void check(); int main() { scanf("%d%d%d%d%d", &N, &M,&x,&y,&K); for(int i=0;i<N;++i) for(int j=0;j<M;++j) scanf("%d", &pan[i][j]); while (K--) { int k; scanf("%d", &k); switch (k) { case 1: if (y + 1 < M) { east(); ++y; check(); } break; case 2: if (y - 1 >= 0) { west(); --y; check(); } break; case 3: if (x - 1 >= 0) { north(); --x; check(); } break; case 4: if (x + 1 < N) { south(); ++x; check(); } break; } } } void check() { if (pan[x][y] == 0) pan[x][y] = dice[2]; else { dice[2] = pan[x][y]; pan[x][y] = 0; } printf("%d\n", dice[5]); } void east() { int tmp = dice[1]; dice[1] = dice[2]; dice[2] = dice[3]; dice[3] = dice[5]; dice[5] = tmp; } void west() { int tmp = dice[3]; dice[3] = dice[2]; dice[2] = dice[1]; dice[1] = dice[5]; dice[5] = tmp; } void south() { int tmp = dice[0]; dice[0] = dice[2]; dice[2] = dice[4]; dice[4] = dice[5]; dice[5] = tmp; } void north() { int tmp = dice[5]; dice[5] = dice[4]; dice[4] = dice[2]; dice[2] = dice[0]; dice[0] = tmp; } | cs |
'알고리즘 풀이 > 시뮬레이션' 카테고리의 다른 글
백준 15685 드래곤커브 (0) | 2018.09.30 |
---|---|
백준 14890 경사로 :: 들짐승 (0) | 2018.07.22 |
백준 3190 뱀 :: 들짐승 (0) | 2018.07.22 |
백준 12100 2048(Easy) :: 들짐승 (0) | 2018.07.22 |