백준
백준 소스코드 [C++] 3190 뱀
Hani_Levenshtein
2021. 2. 3. 14:59
3190번: 뱀
'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다. 게임
www.acmicpc.net
백준 소스코드 [C++] 3190 뱀
#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
int n, m, k,cnt=0;
int arr[102][102];
int dx[4] = { 1,0,-1,0 }, dy[4] = { 0,1,0,-1 };
int dir = 0;
queue <pii> q;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for (int i = 0;i <= n + 1;i++)
arr[0][i] = arr[n + 1][i] = arr[i][0] = arr[i][n + 1] = 1;
cin >> m;
while (m--) {
int u, v;
cin >> u >> v;
arr[u][v] = 2;
}
int y = 1, x = 1;
arr[1][1] = 1;
q.push({ 1,1 });
cin >> k;
int time = 1;
while (k--) {
int u;
char v;
cin >> u >> v;
while (time<=u) {
if (arr[y + dy[dir]][x + dx[dir]] == 1) {
while (k--)
cin >> u >> v;
cout << time;
return 0;
}
else if (arr[y + dy[dir]][x + dx[dir]] == 2) {
arr[y + dy[dir]][x + dx[dir]] = 1;
q.push({ y + dy[dir],x + dx[dir] });
}
else {
arr[y + dy[dir]][x + dx[dir]] = 1;
q.push({ y + dy[dir],x + dx[dir] });
arr[q.front().first][q.front().second] = 0;
q.pop();
}
y = y + dy[dir];
x = x + dx[dir];
time++;
}
if (v == 'D') dir = (dir + 1) % 4;
else if (v == 'L') {
dir = (dir - 1);
if (dir < 0) dir = dir + 4;
}
}
while (true) {
if (arr[y + dy[dir]][x + dx[dir]] == 1) {
cout << time;
return 0;
}
else if (arr[y + dy[dir]][x + dx[dir]] == 2) {
arr[y + dy[dir]][x + dx[dir]] = 1;
q.push({ y + dy[dir],x + dx[dir] });
}
else {
arr[y + dy[dir]][x + dx[dir]] = 1;
q.push({ y + dy[dir],x + dx[dir] });
arr[q.front().first][q.front().second] = 0;
q.pop();
}
y = y + dy[dir];
x = x + dx[dir];
time++;
}
return 0;
}