본문 바로가기

Computer Science/Algorithm

[BOJ 14503] 로봇 청소기

 시뮬레이션 문제이다. 주어진 조건을 만족하게 로봇을 이동시킨다. 처음에 갈 수 있는 곳이 있는지 확인한 후에 갈 수 있을 때와 없을 때를 나누어 코딩했다.

 

 

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
#include <iostream>
#include <vector>
using namespace std;
 
int dx[] = {-1,0,1,0}; // up right down left
int dy[] = { 0,1,0,-1};
int clean[51][51];
int N, M;
 
int solve(vector <vector <int> > &map, int x, int y, int dir, int cnt) {
    
    if (clean[x][y] == 0) {
        cnt++;
        clean[x][y] = 1;
    }
 
    bool flag = false;
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i]; int ny = y + dy[i];
        
        if (nx < 0 || nx >= N || ny < 0 || ny >= M) continue;
 
        if (map[nx][ny] != 1 && clean[nx][ny] == 0) { flag = truebreak; }
    }
    
    int t = dir;
 
    if (flag) {
        
            if (t - 1 < 0) t = 3;
            else t = t - 1;
 
            int nx = x + dx[t]; int ny = y + dy[t];
 
            if (nx < 0 || nx >= N || ny < 0 || ny >= M) {
                solve(map, x, y, t, cnt);
            }
            else if (map[nx][ny] == 1 || (clean[nx][ny]==1 && map[nx][ny] ==0)) {
                solve(map, x, y, t, cnt);
            }
            else if (map[nx][ny] != 1 && clean[nx][ny] == 0) {
                solve(map, nx, ny, t, cnt);
            }
    }
    else {
        int k = dir;
        int nx = x + dx[(k + 2) % 4];
        int ny = y + dy[(k + 2) % 4];
        if (map[nx][ny] == 1) {
            return cnt;
        }
        else {
            solve(map, nx, ny, k, cnt);
        }
    }
}
int main() {
    cin >> N >> M;
    int r, c, dir; cin >> r >> c >> dir;
 
    vector <vector <int> > map(N, vector<int>(M));
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            cin >> map[i][j];
        }
    }
 
    int ans = solve(map, r, c, dir, 0);
 
    cout << ans << '\n';
 
    return 0;
}
cs

 

반응형

'Computer Science > Algorithm' 카테고리의 다른 글

[Algorithm] 인덱스 트리(Indexed Tree)  (0) 2019.01.12
[BOJ 14502] 연구소  (0) 2018.10.18
[BOJ 14890] 경사로  (0) 2018.10.17
[BOJ 14889] 스타트와 링크  (0) 2018.10.17
[BOJ 14891] 톱니바퀴  (0) 2018.10.17