Muscardinus
2020. 8. 19. 17:13
728x90
https://www.acmicpc.net/problem/3190
3190번: 뱀
문제 'Dummy' 라는 도스게임이 있다. 이 게임에는 뱀이 나와서 기어다니는데, 사과를 먹으면 뱀 길이가 늘어난다. 뱀이 이리저리 기어다니다가 벽 또는 자기자신의 몸과 부딪히면 게임이 끝난다.
www.acmicpc.net
#include <iostream>
using namespace std;
int map[101][101];
int snake_y[10101], snake_x[10101];
char cmd[10001];
int head_x, head_y,tail_index;
int dx[] = { 1,0,-1,0 };
int dy[] = { 0,1,0,-1 };
int main() {
ios_base::sync_with_stdio(false);
int n, k, l;
cin >> n >> k;
for (int i = 0; i < k; i++) {
int a, b;
cin >> a >> b;
map[a][b] = 1;
}
cin >> l;
for (int i = 0; i < l; i++) {
int a;
char b;
cin >> a >> b;
cmd[a] = b;
}
int time = 0;
int dir = 0;
head_x = 1, head_y = 1,tail_index=time; //꼬리는 머리가 지나온 길을 따라감
snake_x[time] = head_x;snake_y[time] = head_y;
map[head_y][head_x] = -1; //꼬리가 될 수 있는 부분
while (1) {
++time;
head_x += dx[dir];
head_y += dy[dir];
if (head_x<1 || head_x>n || head_y<1 || head_y>n || map[head_y][head_x] == -1) break;
snake_x[time] = head_x;
snake_y[time] = head_y;
if (map[head_y][head_x] == 0) { //사과 없을때
int tail_x = snake_x[tail_index];
int tail_y = snake_y[tail_index];
map[tail_y][tail_x] = 0;
++tail_index;
}
map[head_y][head_x] = -1;
if (cmd[time] == 'D') dir = (dir + 1) % 4;//방향 전환
if (cmd[time] == 'L') dir = (dir + 3) % 4;
}
cout << time << "\n";
return 0;
}
728x90