3190번 뱀

동도리동·2021년 10월 5일
0

코딩테스트

목록 보기
53/76

낼름~ 뱀처럼 생각하면 쉬운것 같다.

#include <iostream>
#include <vector>
#include <deque>
#include <queue>
#include <tuple>
using namespace std;
int n;
int map[101][101];
int dx[4] = { 0,1,0,-1 };
int dy[4] = { 1,0,-1,0 };
pair<int, char> v[102];
int change(int x, char a) {
	if (a == 'L') {
		return ((x + 4) - 1) % 4;
	}
	else {
		return (x + 4+1) % 4;
	}
}
void f() {
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cout << map[i][j] << " ";
		}
		cout << '\n';
	}
	cout << '\n';
}
int main() {
	int k;
	//freopen("in1.txt", "rt", stdin);
	cin >> n;
	cin >> k;
	for (int i = 0; i < k; i++) {
		int x,y;
		cin >> x>>y;
		x--; y--;
		map[x][y] = 2;
	}
	
	deque<pair<int, int>> d;
	d.push_front(make_pair(0, 0));
	
	cin >> k;
	for (int i = 0; i < k; i++) {
		int x; char y;
		cin >> x >> y;
		
		v[i].first = x;
		v[i].second = y;
	}
	map[0][0] = 1;
	int ans = 0;
	int dir = 0;
	int num = 0;
	
	while (1) {
		int x, y;
		tie(x, y) = d.front();
		int nx = x + dx[dir];
		int ny = y + dy[dir];
		ans++;
		if (nx < 0 || nx >= n || ny < 0 || ny >= n) break;
		if (map[nx][ny] == 1) break;
		d.push_front(make_pair(nx, ny));
		if (map[nx][ny] == 2) {
			map[nx][ny] = 1;
		}
		else {
			map[d.back().first][d.back().second] = 0;
			d.pop_back();
		}
		map[nx][ny] = 1;
		if (ans == v[num].first) {
			dir = change(dir, v[num].second);
			num++;
		}
	}
	cout << ans << '\n';
	
	return 0;
}
profile
긍정코딩세상

0개의 댓글

관련 채용 정보