백준알고리즘

로봇청소기

먼지의삶 2019. 8. 8. 00:54
#include <cstdio>

int n, m, ans = 1;
int x, y, d;
int a[50][50];
int dx[] = {-1, 0, 1, 0}
int dy[] = {0, 1, 0, -1};

void go() {
    while (true) {
        bool clean = false;
        for (int k=0; k<4; k++) {
            int nd = (d+3)%4;
            int nx = x+dx[nd], ny = y+dy[nd];
            d = nd;
            if (!a[nx][ny]) {
                a[nx][ny] = 2;
                ans += 1;
                x = nx, y = ny;
                clean = true;
                break;
            }
        }
        if (!clean) {
            if (a[x-dx[d]][y-dy[d]] == 1) return;
            else x -= dx[d], y -= dy[d];
        }
    }
}

int main() {
    scanf("%d %d", &n, &m);
    scanf("%d %d %d", &x, &y, &d);
    for (int i=0; i<n; i++) {
        for (int j=0; j<m; j++) {
            scanf("%d", &a[i][j]);
        }
    }
    a[x][y] = 2;
	go();
    printf("%d\n", ans);
    return 0;
}

boj