카테고리 없음
[Baekjoon][14503] 로봇 청소기
어발
2022. 3. 10. 16:27
출처 - 백준사이트
나의 풀이
#include <iostream>
#include <queue>
#define MAX_SIZE 50
using namespace std;
int N, M, cnt;
int map[MAX_SIZE][MAX_SIZE] = {0, };
typedef struct {
int x;
int y;
int dir;
} ROBOT;
// 각 index는 북 동 남 서일때 다음이동.
int dy[] = {0, -1, 0, 1 };
int dx[] = {-1, 0, 1, 0 };
int main () {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
ROBOT robot;
cin >> N >> M;
cin >> robot.y >> robot.x >> robot.dir;
for (int y=0; y<N ; y++) {
for (int x=0 ; x<M ; x++)
cin >> map[y][x];
}
queue<ROBOT> q;
q.push(robot);
while (!q.empty()) {
ROBOT temp = q.front(); q.pop();
map[temp.y][temp.x] = 2;
cnt++;
int i = 0;
for (i=0 ; i<4 ; i++) {
int ny = temp.y + dy[temp.dir];
int nx = temp.x + dx[temp.dir];
temp.dir = (temp.dir + 3) % 4;
if (map[ny][nx] == 0) { // 청소도안했고 벽도 아님.
temp.y = ny;
temp.x = nx;
q.push(temp);
break;
}
else // 벽이거나 청소 했음.
continue;
}
if (i==4) { // 후진할 조건
int dir = (temp.dir + 3) % 4;
int ny = temp.y + dy[dir];
int nx = temp.x + dx[dir];
if (map[ny][nx] == 1) // 벽이라면
break;
else {
cnt--;
temp.y = ny;
temp.x = nx;
q.push(temp);
}
}
}
cout << cnt;
return 0;
}
728x90