대웅짱님의 블로그
[14503] 로봇 청소기 본문
문제: 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] = {-1, 0, 1, 0}; int dy[4] = {0, 1, 0, -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 |