강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

bunny님의 프로필 이미지
bunny

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

백준 3190 뱀 문제 질문

작성

·

297

0

안녕하세요

백준 3190 뱀 문제 풀다가 잘 모르겠어서 질문 남깁니다.

http://boj.kr/9a3979de628244948d1d6fefaa6c0f8b

저는 위와 같이 작성하였습니다.

예제는 모두 통과하였는데 23퍼센트 정도에서 틀렸습니다.

제가 놓친 부분이 있을까요?

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요 bunny님 ㅎㅎ

제가 주석달았는데 참고 부탁드립니다.

#include <iostream>
#include <queue>
#include <vector>

using namespace std;

int N, K, y, x, L, t, d;
// 자료구조 map이 있기 때문에 이런 변수명은 자제해주세요.
int map[104][104];
int visited[104][104];
int dy[] = { -1,0,1,0 };
int dx[] = { 0,1,0,-1 };
char c;
queue<pair<int, char>> change;
deque<pair<int, int>> snake;

int main()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N >> K;
	for (int i = 0; i < K; i++)
	{
		cin >> y >> x;
		map[y][x] = 1;
	}

	cin >> L;
	for (int i = 0; i < L; i++)
	{
		cin >> y >> c;
		change.push({ y,c });
	}

	y = 1;
	x = 1;
	d = 1;
	visited[y][x] = 1;
	snake.push_back({ y,x });

	while (1)
	{
		t += 1;

		y += dy[d];
		x += dx[d];

		if (visited[y][x] == 1 || y < 1 || x < 1 || y > N || x > N) break;
//사과를 먹은 것은 왜 표기가 안되죠? map[y][x] = 0이 되어야 하는 것아닌가요?
		if (map[y][x] == 1)
		{
			visited[y][x] = 1;
			snake.push_front({ y,x });
		}
		else
		{
			visited[y][x] = 1;
			snake.push_front({ y,x });

			visited[snake.back().first][snake.back().second] = 0;
			snake.pop_back();
		}

		if (change.size() && t == change.front().first)
		{
			if (change.front().second == 'L') d = (d + 3) % 4;
			else d = (d + 1) % 4;

			change.pop();
		}
	}

	cout << t << "\n";


	return 0;
}
bunny님의 프로필 이미지
bunny
질문자

와 무슨 이런 짓을...

더 꼼꼼히 봐야겠어요.

감사합니다.

bunny님의 프로필 이미지
bunny

작성한 질문수

질문하기