Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Tags
more
Archives
Today
Total
관리 메뉴

대웅짱님의 블로그

[14503] 로봇 청소기 본문

알고리즘/BOJ

[14503] 로봇 청소기

대웅짱 2019. 2. 16. 21:23

문제: https://www.acmicpc.net/problem/14503



로봇 청소기의 위치와 방의 구조가 주어졌을 때


로봇 청소기가 청소 할 수 있는 영역을 구하는 문제이다.


저번에 풀었던 로봇 청소기와 이름은 똑같지만 다른 문제이다.


시뮬레이션 문제이고


문제에서 주어진 행동을 코드로 작성할 수 있다면


어렵지 않은 문제이다.


특히 사각형 외곽은 모두 벽이라고 주어졌기 때문에


배열 범위 초과도 신경 쓸 필요가 없다.


방향은 0 1 2 3이 북 동 남 서 순서이기 때문에


현재 방향에서 왼쪽 방향을 보기 위해선 환형 배열이라고 가정했을 때 3칸 움직이면 된다.


즉 방향 d 가 있을 때 d = (d+3)%4를 하면 왼쪽 방향이 나온다.


끝.





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
#include<cstdio>
#include<algorithm>
using namespace std;
int arr[55][55];
int dx[4= {-1010};
int dy[4= {010-1};
int main(){
    int n, m, x, y, d;
    scanf("%d %d %d %d %d"&n, &m, &x, &y, &d);
    for(int i=0; i<n; i++){
        for(int j=0; j<m; j++){
            scanf("%d"&arr[i][j]);
        }
    }
    int res = 0, cnt = 0;
    while(1){
        //1
        if(arr[x][y] == 0){
            arr[x][y] = 2;
            res++;
        }
        if(cnt == 4){
            //2-3
            if(arr[x-dx[d]][y-dy[d]] != 1){
                x-=dx[d]; y-=dy[d];
                cnt = 0;
                continue;
            }
            //2-4
            else{
                break;
            }
        }
 
        //2
        d = (d+3)%4;
        //2-1
        if(arr[x+dx[d]][y+dy[d]] == 0){
            x+=dx[d]; y+=dy[d];
            cnt = 0;
            continue;
        }
        //2-2
        else{
            cnt++;
        }
    }
 
    printf("%d\n", res);
 
    return 0;
}
cs


'알고리즘 > BOJ' 카테고리의 다른 글

[14889] 스타트와 링크  (0) 2019.02.19
[14888] 연산자 끼워넣기  (0) 2019.02.19
[14502] 연구소  (0) 2019.02.14
[14501] 퇴사  (0) 2019.02.13
[14500] 테트로미노  (0) 2019.02.12