https://www.acmicpc.net/problem/14503
생각보다 크게 어려웠던 문제는 아니었습니다. 로봇 청소기의 작동 조건이 문제에 명확하게 나와있었기 때문에 이를 그대로 코딩으로 구현하기만 하면 쉽게 풀 수 있다고 생각합니다. 또한 로봇 청소기가 무조건 왼쪽부터 탐색한다는 점도 있어서 쉽게 구현할 수 있었던 것 같습니다.
#include <iostream>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int map[50][50];
int clean = 0;
int n, m, r, c, d;
cin >> n >> m >> r >> c >> d;
// 지도 입력
for (int y = 0; y < n; y++) {
for (int x = 0; x < m; x++) {
cin >> map[y][x];
}
}
// 방향 정보 (북, 동, 남, 서)
int dx[4] = { 0, 1, 0, -1 };
int dy[4] = { -1, 0, 1, 0 };
while (true) {
// 현재 위치를 청소
if (map[r][c] == 0) {
map[r][c] = 2;
clean++;
}
// 네 방향 모두 청소가 되어있거나 벽인 경우
if (map[r - 1][c] && map[r + 1][c] && map[r][c - 1] && map[r][c + 1]) {
if (map[r - dy[d]][c - dx[d]] == 1) {
break;
}
// 한 칸 후진
r -= dy[d];
c -= dx[d];
}
else {
d = d == 0 ? 3 : d - 1;
// 한 칸 전진
if (map[r + dy[d]][c + dx[d]] == 0) {
r += dy[d];
c += dx[d];
}
}
}
cout << clean << "\n";
return 0;
}