문제
https://www.acmicpc.net/problem/14503
14503번: 로봇 청소기
로봇 청소기가 주어졌을 때, 청소하는 영역의 개수를 구하는 프로그램을 작성하시오. 로봇 청소기가 있는 장소는 N×M 크기의 직사각형으로 나타낼 수 있으며, 1×1크기의 정사각형 칸으로 나누어
www.acmicpc.net
코드
#include <iostream>
using namespace std;
int n,m,r,c,dir_num,cnt=0;
int arr[50][50];
bool cleaned[50][50];
int dy[4] = {-1,0,1,0};
int dx[4] = {0,1,0,-1};
bool inRange(int y, int x){
return 0<=y&&y<n&&0<=x&&x<m;
}
void clean(int y, int x, int dir_num){
if(!cleaned[y][x]){
cnt++;
cleaned[y][x]=true;
}
bool flag = true;
for(int i=dir_num+3; i>=dir_num; i--){
int ny=y+dy[i%4];
int nx=x+dx[i%4];
if(inRange(ny, nx)&&arr[ny][nx]==0&&!cleaned[ny][nx]){
flag=false;
clean(ny,nx,i%4);
break;
}
}
if(flag&&inRange(y-dy[dir_num],x-dx[dir_num])&&arr[y-dy[dir_num]][x-dx[dir_num]]==0) clean(y-dy[dir_num],x-dx[dir_num],dir_num);
}
int main(){
cin >> n >> m >> r >> c >> dir_num;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
cin >> arr[i][j];
}
}
clean(r, c, dir_num);
cout << cnt;
return 0;
}
정리
후진할 때 그 후진한 위치가 청소가 되어 있을 경우에는 카운트를 올려주지 말아야 한다. 이걸 놓쳐서 시간을 오래 걸린 문제였다.
참조
'Beakjoon > simulation' 카테고리의 다른 글
[백준] 3190번 뱀 (C++) - simulation (0) | 2022.08.06 |
---|---|
[백준] 17144번 미세먼지 안녕! (C++) - simulation dx, dy (0) | 2022.07.21 |