his130   2년 전

지금 코드와 아래에 코드는 제가 작성한 코드인데요.

아랫쪽 코드는 정답이 됩니다.

하지만 제가 다시 풀면서 변수를 추가해서 편하게 만들려고 했는데

분명 같은 코드인데 아무리 봐도... 왜 아래껀 25퍼센트에서 틀렸다고 나오는 걸까요..?

혹시 이 오류를 잡아주실 분 계신가요..?

그냥 뒤로 이동할 때 -d 를 하지 않고 따로 bd를 구해서 +bd를 해주는 방식 바꿔서 구현 했습니다.

#include<iostream>

using namespace std;
int dx[4] = { -1,0,1,0 };
int dy[4] = { 0,1,0,-1 };
int dir[4] = { 3,0,1,2 };
int backdir[4] = { 2,3,0,1 };

int main()
{

int ans = 0;
int N, M;
int x, y, d;
int map[51][51] = { 0, };
cin >> N >> M;
cin >> x >> y >> d;

for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
cin >> map[i][j];
}
}

while (true)
{
map[x][y] = 2;

if (d == 0)
{
int nd = dir[d];
int bd = backdir[d];

int bx = x + dx[bd];
int by = y + dy[bd];

int nx = x + dx[nd];
int ny = y + dy[nd];

if (map[x + 1][y] != 0 && map[x - 1][y] != 0 && map[x][y + 1] != 0 && map[x][y - 1] != 0)
{

if (map[bx][by] == 1)
{
break;
}
else if (map[bx][by] == 2)
{
x = bx;
y = by;
d = d;
}
}

else if (nx >= 0 && ny >= 0 && nx < N && ny < M &&  map[nx][ny] == 0)
{
x = nx;
y = ny;
d = nd;
}
else if (nx >= 0 && ny >= 0 && nx < N && ny < M &&  map[nx][ny] != 0)
{
d = nd;
}
}
else if (d == 1)
{
int nd = dir[d];
int bd = backdir[d];

int bx = x + dx[bd];
int by = y + dy[bd];

int nx = x + dx[nd];
int ny = y + dy[nd];

if (map[x + 1][y] != 0 && map[x - 1][y] != 0 && map[x][y + 1] != 0 && map[x][y - 1] != 0)
{

if (map[bx][by] == 1)
{
break;
}
else if (map[bx][by] == 2)
{
x = bx;
y = by;
d = d;
}
}

else if (nx >= 0 && ny >= 0 && nx < N && ny < M &&  map[nx][ny] == 0)
{
x = nx;
y = ny;
d = nd;
}
else if (nx >= 0 && ny >= 0 && nx < N && ny < M &&  map[nx][ny] != 0)
{
d = nd;
}
}
else if (d == 2)
{
int nd = dir[d];
int bd = backdir[d];

int bx = x + dx[bd];
int by = y + dy[bd];

int nx = x + dx[nd];
int ny = y + dy[nd];

if (map[x + 1][y] != 0 && map[x - 1][y] != 0 && map[x][y + 1] != 0 && map[x][y - 1] != 0)
{

if (map[bx][by] == 1)
{
break;
}
else if (map[bx][by] == 2)
{
x = bx;
y = by;
d = d;
}
}

else if (nx >= 0 && ny >= 0 && nx < N && ny < M &&  map[nx][ny] == 0)
{
x = nx;
y = ny;
d = nd;
}
else if (nx >= 0 && ny >= 0 && nx < N && ny < M &&  map[nx][ny] != 0)
{
d = nd;
}
}
else if (d == 3)
{
int nd = dir[d];
int bd = backdir[d];

int bx = x + dx[bd];
int by = y + dy[bd];

int nx = x + dx[nd];
int ny = y + dy[nd];

if (map[x + 1][y] != 0 && map[x - 1][y] != 0 && map[x][y + 1] != 0 && map[x][y - 1] != 0)
{

if (map[bx][by] == 1)
{
break;
}
else if (map[bx][by] == 2)
{
x = bx;
y = by;
d = d;
}
}

else if (nx >= 0 && ny >= 0 && nx < N && ny < M &&  map[nx][ny] == 0)
{
x = nx;
y = ny;
d = nd;
}
else if (nx >= 0 && ny >= 0 && nx < N && ny < M &&  map[nx][ny] != 0)
{
d = nd;
}
}
}

for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
if (map[i][j] == 2)
{
ans += 1;
}
}
}

cout << ans << endl;

return 0;

}

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