Muscardinus

뱀 본문

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

'알고리즘 문제 > [삼성 SW 역량 테스트 기출 문제]' 카테고리의 다른 글

주사위 굴리기  (0) 2020.08.21
시험 감독  (0) 2020.08.20
2048(Easy)  (0) 2020.08.18
구술탈출 2  (0) 2020.08.17
퇴사  (0) 2020.08.16
Comments