his130   6년 전

정말 똑같은 코드라고 생각합니다.

단지 아래코드와 위 코드 차이는

아래코드는 제가 뱀을 1,1에 놨을때

위 코드는 0,0에 놓았을 떄 입니다.

그때에 맞춰서 범위랑 입력받는 값을 -1해줬구요.

그리고 뱀이 있는 위치는 위의 코드에서는 2 아래코드에서 3 

머리랑 꼬리가 움직이는 걸로 구현했습니다.

모든 테스트케이스는 돌아가는데

아래는 정답이고 위에는 통과하지 못합니다.

똑같은 코드인데 무슨 문제인가요?

#include<iostream>
#include<queue>
using namespace std;
int N, K, L;
queue<pair<int, char> > q;
int dx[4] = { 0,1,0,-1 }; //0-오른쪽,1-아래,2-왼쪽,3-위쪽
int dy[4] = { 1,0,-1,0 };
int map[101][101] = { 0, };
int main()
{
for (int i = 0; i < 101; i++)
{
for (int j = 0; j < 101; j++)
{
map[i][j] = -1; //0은 빈칸
}
}

//freopen("input.txt", "r", stdin);

char check[101][101];
cin >> N;
for (int i = 0; i <N; i++)
{
for (int j = 0; j < N; j++)
{
map[i][j] = 0; //0은 빈칸
}
}
cin >> K;

for (int i = 0; i < K; i++)
{
int a, b;
cin >> a >> b;
map[a-1][b-1] = 1;
}
cin >> L;
for (int i = 0; i < L; i++)
{
int a;
char b;
cin >> a;
cin >> b;
q.push(make_pair(a, b));
}

int time = 0;
int head_x = 0;
int head_y = 0;
int tail_x = 0;
int tail_y = 0;
int head_dir = 0;
int tail_dir = 0;
map[head_x][head_y] = 2;
while (true)
{

if (q.size() != 0)

{
int op_time = q.front().first;
char op = q.front().second;

if (time == op_time)
{
if (op == 'L')
{
check[head_x][head_y] = op;
if (head_dir == 0)
{
head_dir = 3;
}
else if (head_dir == 1)
{
head_dir = 0;
}
else if (head_dir == 2)
{
head_dir = 1;
}
else if (head_dir == 3)
{
head_dir = 2;
}
}
else if (op == 'D')
{
check[head_x][head_y] = op;

if (head_dir == 0)
{
head_dir = 1;
}
else if (head_dir == 1)
{
head_dir = 2;
}
else if (head_dir == 2)
{
head_dir = 3;
}
else if (head_dir == 3)
{
head_dir = 0;
}
}
q.pop();
}
}

        if (check[tail_x][tail_y] == 'L' || check[tail_x][tail_y] == 'D')
{
if (check[tail_x][tail_y] == 'D')
{
if (tail_dir == 0)
{
tail_dir = 1;
}
else if (tail_dir == 1)
{
tail_dir = 2;
}
else if (tail_dir == 2)
{
tail_dir = 3;
}
else if (tail_dir == 3)
{
tail_dir = 0;
}
}
else if (check[tail_x][tail_y] == 'L')
{
if (tail_dir == 0)
{
tail_dir = 3;
}
else if (tail_dir == 1)
{
tail_dir = 0;
}
else if (tail_dir == 2)
{
tail_dir = 1;
}
else if (tail_dir == 3)
{
tail_dir = 2;
}
}

check[tail_x][tail_y] = 'Z';
}

int head_nx = head_x + dx[head_dir];
int head_ny = head_y + dy[head_dir];

int tail_nx = tail_x + dx[tail_dir];
int tail_ny = tail_y + dy[tail_dir];

if (head_nx >= 1 && head_ny >= 1 && head_nx < N && head_ny < N)
{
if (map[head_nx][head_ny] == 0)
{
map[tail_x][tail_y] = 0;
map[head_nx][head_ny] = 2;
head_x = head_nx;
head_y = head_ny;
tail_x = tail_nx;
tail_y = tail_ny;
}
else if (map[head_nx][head_ny] == 1)
{
map[head_nx][head_ny] = 2;
head_x = head_nx;
head_y = head_ny;
}
else
{
time += 1;
break;
}
}
else
{
time += 1;
break;
}

time += 1;
//pnt();
}

cout << time << endl;

return 0;
}

댓글을 작성하려면 로그인해야 합니다.