C++:: boj 3190 < 뱀 >

jahlee·2023년 9월 15일
0
post-thumbnail

뱀게임을 구현해서 죽는지 몇초만에 죽는지를 판단하는 문제이다. 주의할점은 사과의 위치가 행 열로 주어지는데 board는 0,0부터 커지는 판임을 명심하자. (0,0 은 1행 1열)

#include <iostream>
#include <vector>
#include <queue>
using namespace std;

int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};

int main() {
	int n, k, l, row, col;
	cin >> n >> k;
	vector<vector<int> > board(n, vector<int>(n, -1));
	for (int i=0; i<k; i++) {
		cin >> row >> col;
		board[row-1][col-1] = 4;// apple
	}
	queue<pair<int, char> > q;
	cin >> l;
	while (l--) {
		pair<int, char> p;
		cin >> p.first >> p.second;
		q.push(p);
	}
	int cur_time = 0, dir = 0;
	pair<int, int> head(0, 0), tail(0, 0);
	while (1) {
		if (!q.empty() && q.front().first == cur_time) {
        	// 머리를 틀 시간이면 틀어준다.
			char ld = q.front().second; q.pop();
			dir = ld == 'L' ? (dir + 3) % 4 : (dir + 1) % 4;
		}
		board[head.first][head.second] = dir;// 현재 머리가 가리키는 방향을 기억

		int nx = head.first + dx[dir], ny = head.second + dy[dir];
		if (nx<0 || ny<0 || nx >= n || ny >= n) break;
		if (board[nx][ny] >= 0 && board[nx][ny] != 4) break;
		if (board[nx][ny] != 4) {// 사과먹은게 아니라면
			int tail_dir = board[tail.first][tail.second];
			board[tail.first][tail.second] = -1;
			tail.first += dx[tail_dir];
			tail.second += dy[tail_dir];
		}
		board[nx][ny] = dir;
		head = {nx, ny};
		cur_time++;
	}
	cout << cur_time+1 << "\n";
}

0개의 댓글

Powered by GraphCDN, the GraphQL CDN