https://www.acmicpc.net/problem/14503
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
int n, m;
int arr[50][50] = { 0, };
int nowX, nowY, d;
// 북 0 동 1 남 2 서 3
int dr[4] = { -1, 0, 1, 0};
int dc[4] = { 0, 1, 0, -1 };
int cnt = 0;
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> m;
cin >> nowX >> nowY >> d;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> arr[i][j];
}
}
while (1) {
bool flag = true;
// 1. 현재 칸 청소 안된거면 청소
if (arr[nowX][nowY] == 0) {
arr[nowX][nowY] = 2;
cnt += 1;
}
// 주변 4칸 탐색!
for (int i = 0; i < 4; i++) {
int nextRow = nowX + dr[i];
int nextCol = nowY + dc[i];
if (arr[nextRow][nextCol] == 0) {
flag = false;
break;
}
}
// 2. 주변 4칸이 다 청소 된 경우
if (flag == true) {
int nextRow = nowX + dr[(d + 2) % 4];
int nextCol = nowY + dc[(d + 2) % 4];
if (arr[nextRow][nextCol] == 1) {
break;
}
else {
nowX = nextRow;
nowY = nextCol;
}
}
else { // 3. 주변 4칸이 다 청소 안된 경우
d = (d + 3) % 4; // 반시계로 90도 회전
int nextRow = nowX + dr[d % 4];
int nextCol = nowY + dc[d % 4];
if (arr[nextRow][nextCol] == 0) {
nowX = nextRow;
nowY = nextCol;
}
}
}
cout << cnt;
return 0;
}
와 진짜 문제 반시계 90도를 그냥 90도로 보고 인생 손해봤다...
벌써 로봇청소기를 푸시네요?;; 터틀봇 문제도 쫌 풀어보시지ㅎㅋㅋㅋㅋㅋ