그냥 문제에 주어진 조건대로 움직이기만 하면 끝나는 문제입니다.
말이 좀 난해하긴한데... 디버깅하면서 따라가니 이해가 가더라구요!
그림 그려보시면 편하실 것 같습니다.
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 115 116 117 118 119 120 121 122 123 | #include <cstdio> #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <string.h> #include <vector> #include <functional> #define MAX_SIZE 51 #define INF 0x7fffffff using namespace std; //input int map[MAX_SIZE][MAX_SIZE]; int m, n; int sx, sy, sd; //process int max_value; int dx[4] = { -1, 0, 1, 0}; int dy[4] = { 0, 1, 0, -1}; void input() { scanf("%d %d", &m, &n); scanf("%d %d %d", &sx, &sy, &sd); for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { scanf("%d", &map[i][j]); } } } int turn(int now, int next) { if(next == 0)//next == 0은 왼쪾으로 턴 { if(now == 0) return 3; else if(now == 1) return 0; else if(now == 2) return 1; else return 2; } else return (now + 2) % 4;//0->2,2->0,1->3,3->1 } void print() { for(int i = 0; i < m; i++) { for(int j = 0; j < n; j++) { printf("%d ", map[i][j]); } puts(""); } puts(""); } void process() { int x = sx; int y = sy; int d = sd; int cnt = 0; int ret = 1; map[x][y] = 2; int nx; int ny; while(1) { if(cnt == 4) { d = turn(d, 1); nx = x + dx[d]; ny = y + dy[d]; if(nx < 0 || ny < 0 || nx >= m || ny >= n || map[nx][ny] == 1) break; x = nx; y = ny; d = turn(d, 1); cnt = 0; continue; } d = turn(d, 0); nx = x + dx[d]; ny = y + dy[d]; cnt++; if(nx < 0 || ny < 0 || nx >= m || ny >= n || map[nx][ny] != 0) continue; x = nx; y = ny; map[x][y] = 2; // 청소함! ret++; cnt = 0; } printf("%d\n", ret); } int main() { input(); process(); return 0; } | cs |
'알고리즘 > 탐색' 카테고리의 다른 글
[1941] 소문난 칠공주 (1) | 2017.07.01 |
---|---|
[2146] 다리 만들기 (2) | 2017.05.23 |
[14502] 연구소 (5) | 2017.04.18 |
[14501] 퇴사 (4) | 2017.04.17 |
[14500] 테트로미노 (0) | 2017.04.17 |