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 102 103 104 105 106 107 108 109 110 111 112 113 114 | #define _CRT_SECURE_NO_WARNINGS #include <iostream> using namespace std; int mapW, mapH, placeX, placeY, cnt; int map[27][27] = { 0, }; int moveM[1004] = { 0, }; int dice[6] = { 0,0,0,0,0,0 }; int temp = 0; bool isin(int a,int b) { if (a >= 0 && a < mapW&&b >= 0 && b < mapH)return true; else return false; } int roll(int a) { switch (a) { case 1: //cout << " 오른쪽"<<endl; temp = dice[1]; dice[1] = dice[2]; dice[2] = dice[3]; dice[3] = dice[5]; dice[5] = temp; cout << dice[5] << endl; break; case 2: //cout << "왼쪽" << endl; temp = dice[3]; dice[3] = dice[2]; dice[2] = dice[1]; dice[1] = dice[5]; dice[5] = temp; cout << dice[5] << endl; break; case 3: //cout << "위로"<<endl; temp = dice[0]; dice[0] = dice[2]; dice[2] = dice[4]; dice[4] = dice[5]; dice[5] = temp; cout << dice[5] << endl; break; case 4: //cout << "아래로"<<endl; temp = dice[5]; dice[5] = dice[4]; dice[4] = dice[2]; dice[2] = dice[0]; dice[0] = temp; cout << dice[5] << endl; break; } return 0; } void search(int k) { for (int i = 0; i < cnt; i++) { if (moveM[i] == 1 && isin(placeX, placeY+1)) { roll(1); if (map[placeX][placeY+1] == 0) map[placeX][placeY + 1] = dice[2]; else { dice[2] = map[placeX][placeY + 1]; map[placeX][placeY + 1] = 0; } //cout << "굴린다음에 아래에있는 숫자를 map[" << placeX << "][" << placeY << "]로 바꿈"<<endl; placeY++; } if (moveM[i] == 2 && isin(placeX, placeY-1)) { roll(2); if (map[placeX][placeY-1] == 0) map[placeX][placeY-1] = dice[2]; else{ dice[2] = map[placeX][placeY-1]; map[placeX][placeY - 1] = 0; } //cout << "굴린다음에 아래에있는 숫자를 map[" << placeX << "][" << placeY << "]로 바꿈"<<endl; placeY--; } if (moveM[i] == 3 && isin(placeX-1, placeY)) { roll(3); if (map[placeX-1][placeY] == 0) map[placeX-1][placeY] = dice[2]; else{ dice[2] = map[placeX-1 ][placeY]; map[placeX-1][placeY] = 0; } //cout << "굴린다음에 아래에있는 숫자를 map[" << placeX << "][" << placeY << "]로 바꿈"<<endl; placeX--; } if (moveM[i] == 4 && isin(placeX+1, placeY)) { roll(4); if (map[placeX+1][placeY] == 0) map[placeX+1][placeY] = dice[2]; else {dice[2] = map[placeX+1][placeY]; map[placeX+1][placeY ] = 0; } //cout << "굴린다음에 아래에있는 숫자를 map[" << placeX << "][" << placeY << "]로 바꿈"<<endl; placeX++; } //cout << "현재아랫면" << dice[2] << endl; } } int main() { //freopen("test.txt", "r", stdin); cin >> mapW >> mapH >> placeX >> placeY >> cnt; for (int i = 0; i < mapW; i++) { for (int j = 0; j < mapH; j++) { cin >> map[i][j]; } } for (int i = 0; i < cnt; i++) { cin >> moveM[i]; } search(0); } | cs |
원시적인코드 dice[] 배열에 현재 좌우앞뒤위아래 상황을 다 저장한다
'재미있는공부이야기 > 알고리듬' 카테고리의 다른 글
백준 17071번 숨바꼭질 5 (0) | 2019.03.21 |
---|---|
백준 9019번 DSLR (0) | 2019.02.28 |
백준 7569번 토마토 (0) | 2019.02.20 |
백준 2178번 미로찾기 (0) | 2019.02.20 |
KMP 알고리즘 (0) | 2019.02.15 |