문제 링크 : https://www.acmicpc.net/problem/14499
문제 설명
1. 주사위와 지도가 주어지는데 주사위는 기본 값이 모든면이 0으로 시작하고 지도는 10이하 0이상의 정수가 적혀있다.
2. 지도의 수가 0이면 주사위 바닥면의 숫자가 지도에 복사되고 ,주사위 바닥면이 0 이면 주사위 바닥면에 지도의
숫자가 복사된다.
3. 주사위는 이동할때마다 윗면의 수를 출력 한다
알고리즘
주사위 의 단면도 가 이런모양이라고하면
굴렸을때 단면도를 이런식으로 바뀌게 함수를 만든다
그리고 입력에따라 굴리고 윗면은 6번위치 (arr[5]) 이므로 arr[5]를 출력한다.
코드
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<iostream> #include<vector> using namespace std; int map[21][21]; int N, M, x, y, K; int dice[6]; int copy_dice[6]; bool mov = false; vector<int> m; void move_R() { if (x < M - 1) { for (int i = 0; i < 6; i++) { copy_dice[i] = dice[i]; } dice[0] = copy_dice[3]; dice[2] = copy_dice[0]; dice[3] = copy_dice[5]; dice[5] = copy_dice[2]; x++; mov = true; } } void move_L() { if (x > 0) { for (int i = 0; i < 6; i++) { copy_dice[i] = dice[i]; } dice[0] = copy_dice[2]; dice[2] = copy_dice[5]; dice[3] = copy_dice[0]; dice[5] = copy_dice[3]; x--; mov = true; } } void move_U() { if (y < N - 1) { for (int i = 0; i < 6; i++) { copy_dice[i] = dice[i]; } dice[0] = copy_dice[1]; dice[1] = copy_dice[5]; dice[4] = copy_dice[0]; dice[5] = copy_dice[4]; y++; mov = true; } } void move_D() { if (y > 0) { for (int i = 0; i < 6; i++) { copy_dice[i] = dice[i]; } dice[0] = copy_dice[4]; dice[1] = copy_dice[0]; dice[4] = copy_dice[5]; dice[5] = copy_dice[1]; y--; mov = true; } } int main() { cin >> N >> M >> y >> x >> K; for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { cin >> map[i][j]; } } for (int i = 0; i < K; i++) { int num; cin >> num; mov = false; if (num == 1) { move_R(); } else if (num == 2) { move_L(); } else if (num == 4) { move_U(); } else if (num == 3) { move_D(); } if (mov) { if (map[y][x] == 0) map[y][x] = dice[0]; else { dice[0] = map[y][x]; map[y][x] = 0; } cout << dice[5] << endl; } } } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 1992번: 쿼드트리 (0) | 2020.04.16 |
---|---|
백준 1759번 : 암호만들기 (0) | 2020.04.16 |
백준 1780번 : 종이의 개수 (0) | 2020.04.14 |
백준 2805번: 나무 자르기 (0) | 2020.04.14 |
백준 2343번: 기타레슨 (0) | 2020.04.14 |