뱀게임을 구현해서 죽는지 몇초만에 죽는지를 판단하는 문제이다. 주의할점은 사과의 위치가 행 열로 주어지는데 board는 0,0부터 커지는 판임을 명심하자. (0,0 은 1행 1열)
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
int main() {
int n, k, l, row, col;
cin >> n >> k;
vector<vector<int> > board(n, vector<int>(n, -1));
for (int i=0; i<k; i++) {
cin >> row >> col;
board[row-1][col-1] = 4;// apple
}
queue<pair<int, char> > q;
cin >> l;
while (l--) {
pair<int, char> p;
cin >> p.first >> p.second;
q.push(p);
}
int cur_time = 0, dir = 0;
pair<int, int> head(0, 0), tail(0, 0);
while (1) {
if (!q.empty() && q.front().first == cur_time) {
// 머리를 틀 시간이면 틀어준다.
char ld = q.front().second; q.pop();
dir = ld == 'L' ? (dir + 3) % 4 : (dir + 1) % 4;
}
board[head.first][head.second] = dir;// 현재 머리가 가리키는 방향을 기억
int nx = head.first + dx[dir], ny = head.second + dy[dir];
if (nx<0 || ny<0 || nx >= n || ny >= n) break;
if (board[nx][ny] >= 0 && board[nx][ny] != 4) break;
if (board[nx][ny] != 4) {// 사과먹은게 아니라면
int tail_dir = board[tail.first][tail.second];
board[tail.first][tail.second] = -1;
tail.first += dx[tail_dir];
tail.second += dy[tail_dir];
}
board[nx][ny] = dir;
head = {nx, ny};
cur_time++;
}
cout << cur_time+1 << "\n";
}