낼름~ 뱀처럼 생각하면 쉬운것 같다.
#include <iostream>
#include <vector>
#include <deque>
#include <queue>
#include <tuple>
using namespace std;
int n;
int map[101][101];
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
pair<int, char> v[102];
int change(int x, char a) {
if (a == 'L') {
return ((x + 4) - 1) % 4;
}
else {
return (x + 4+1) % 4;
}
}
void f() {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << map[i][j] << " ";
}
cout << '\n';
}
cout << '\n';
}
int main() {
int k;
//freopen("in1.txt", "rt", stdin);
cin >> n;
cin >> k;
for (int i = 0; i < k; i++) {
int x,y;
cin >> x>>y;
x--; y--;
map[x][y] = 2;
}
deque<pair<int, int>> d;
d.push_front(make_pair(0, 0));
cin >> k;
for (int i = 0; i < k; i++) {
int x; char y;
cin >> x >> y;
v[i].first = x;
v[i].second = y;
}
map[0][0] = 1;
int ans = 0;
int dir = 0;
int num = 0;
while (1) {
int x, y;
tie(x, y) = d.front();
int nx = x + dx[dir];
int ny = y + dy[dir];
ans++;
if (nx < 0 || nx >= n || ny < 0 || ny >= n) break;
if (map[nx][ny] == 1) break;
d.push_front(make_pair(nx, ny));
if (map[nx][ny] == 2) {
map[nx][ny] = 1;
}
else {
map[d.back().first][d.back().second] = 0;
d.pop_back();
}
map[nx][ny] = 1;
if (ans == v[num].first) {
dir = change(dir, v[num].second);
num++;
}
}
cout << ans << '\n';
return 0;
}