inflearn logo
강의

Course

Instructor

[MMORPG Game Development Series with C# and Unity] Part 2: Data Structures and Algorithms

A* Implementation Part 2

void CalcPathFromParent(Pos[,] parent)에 대해서

202

tailwind

1 asked

0

다음이 위가 제가 작성한 코드고 아래가 예시로 제공해주신 코드입니다.
y와 x를 업데이트 하는 방식에만 차이가 있는 것 같은데, 위 코드로 하면 에러가 납니다.
아래코드로는 잘 됩니다.
제가 보기엔 똑같아 보이는데 무슨 차이가 있는 걸까요??

void CalcPathFromParent(Pos[,] parent)
{
    int y = _board.DestY;
    int x = _board.DestX;
    while (parent[y, x].Y != y || parent[y, x].X != x)
    {
        _points.Add(new Pos(y, x));
        y = parent[y, x].Y;
        x = parent[y, x].X;
    }
    _points.Add(new Pos(y, x));
    _points.Reverse();
}


void CalcPathFromParent(Pos[,] parent)
{
	int y = _board.DestY;
	int x = _board.DestX;
	while (parent[y, x].Y != y || parent[y, x].X != x)
	{
		_points.Add(new Pos(y, x));
		Pos pos = parent[y, x];
		y = pos.Y;
		x = pos.X;
	}
	_points.Add(new Pos(y, x));
	_points.Reverse();
}

C#

Answer 2

1

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

질문하신 void CalcPathFromParent(Pos[,] parent) 함수의 작성 방식과 관련하여 발생하는 에러 문제에 대해 비슷한 상황을 논의한 플레이어 이동이 이상한 것에 관한 질문을 찾았습니다. 이 질문에서 다룬 내용이 질문자님께 도움이 될 것 같아서 추천드립니다.

문제의 핵심은 yx 값을 업데이트하는 방식에 있습니다. 첫 번째 코드에서는 y의 값을 업데이트하고 나서 바로 x의 값을 업데이트함으로써 순차적으로 작업을 진행합니다. 이 과정에서 y 값이 이미 변경되었기 때문에, 다음 x값을 업데이트할 때 사용되는 parent[y, x]가 변경된 y 값을 기준으로 가져오게 되므로 예상치 않은 결과를 초래할 수 있습니다.

이에 반해, 두 번째 코드에서는 Pos pos = parent[y, x];를 통해 현재의 yx에 해당하는 pos 객체를 먼저 만들고, 이후에 yx를 업데이트합니다. 이 방법을 사용하면 yx를 업데이트하는 동안 parent[y, x]로부터 정보를 정확하게 가져올 수 있습니다.

즉, 첫 번째 코드에서는 y의 값이 바뀐 후 x 값이 계산되므로 문제가 발생할 수 있습니다. 두 번째 코드에서 Pos 객체를 사용하여 값을 한 번에 업데이트 하므로, 이러한 문제를 회피할 수 있습니다. 이런 세부적인 차이가 결과에 큰 영향을 끼칠 수 있음을 확인할 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

Rookiss

y = parent[y, x].Y;

이걸 할 때 이미 y가 바뀌므로, 두 번째줄이 다르게 실행됩니다.
x = parent[y, x].X;

게임개발에서 주로 어느부분에 알고리즘들이 쓰이는지 궁금합니다

0

172

2

글꼴 바꿔도 자간이 좁아 찌그러져보이시는 분들

0

88

1

NullReferenceException 예외) 같은 실수하시는분 계실까봐 남겨요

0

66

1

parent를 Pos타입으로 만든 이유

0

74

1

콘솔창에 격자가 안나옴 미로 생성 X

0

133

1

격자 생성 안됨 무한루프

0

114

1

BFS 질문

0

143

2

격자 무한 출력

0

167

2

A* 의 PriorityQueue 관련 질문입니다

0

155

2

vscode에서 원그리기

0

180

1

환결설정 강의 원 그리기

0

122

1

15-17분

0

87

1

3:16초에 근데 이렇게 해가지고 부분에 "{}"를 만들어서 자식 node들을 생성하던데 왜 중괄호로 감싸게 만드는 건가요?

0

141

2

동적 배열 관련 질문입니다!

0

209

1

Big-o 표기법에서 시간 복잡도

0

167

1

7:40에서 언급하신 색상이 날아가는 문제 이해를 못하겠습니다

0

151

1

트리구현연습 강의 질문있어요

0

143

1

창은 뜨는데 맵이 나타나지 않아요.

0

175

1

Ctrl F5 하면 나오는 창은 어디서 설정할까요??

0

271

1

NullReferenceException예외가 발생했을때 어떻게 해야하나요?

0

229

1

[해결] 환경설정 강의에서 원이 이상하게 그려지는 문제

3

311

2

오른손 법칙에서 플레이어 점이 안 움직입니다

0

245

2

맵 만들기 오류

0

179

1

맵 만들기 부분 오류

0

236

1