인프런 커뮤니티 질문&답변
백준 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;
}






와 무슨 이런 짓을...
더 꼼꼼히 봐야겠어요.
감사합니다.