티스토리 뷰

백준

백준 소스코드 [C++] 3190 뱀

Hani_Levenshtein 2021. 2. 3. 14:59

www.acmicpc.net/problem/3190

 

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;
}
댓글