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

안유선님의 프로필 이미지
안유선

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

BFS를 이용한 길찾기 구현

BFS함수의 두 번째 while문 조건에 대하여

작성

·

285

0

BFS함수의 두 번째 while문은

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;

            }

이렇게 가르쳐주셨습니다.

그런데 제가 조건을 while (parent[y, x] != new Pos(y, x)) 로 수정을 해도 되지 않을까 싶어서 시도해보았는데 무한루프에 걸려버리더라구요. y, x의 부모가 자기 자신과 동일하다면 출발점이므로 강사님께서 가르쳐주신 조건과 같은 것이 아닌가요?

고민을 해보고 있는데 Pos라는 클래스를 새롭게 생성하게 되면 좌표는 동일하더라도 다른 주소를 가리키게 되는 것이기 때문에

parent[y, x] != new Pos(y, x) 라는 조건이 true가 될 수 없는 것인가요?

답변 2

2

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

고민을 해보고 있는데 Pos라는 클래스를 새롭게 생성하게 되면 좌표는 동일하더라도 다른 주소를 가리키게 되는 것이기 때문에 parent[y, x] != new Pos(y, x) 라는 조건이 true가 될 수 없는 것인가요?

-> 그렇습니다. '기본적'으로는 참조값을 비교하기 때문에, 둘이 다르다고 인식하는거죠.
하지만 방법이 없진 않습니다!

== 와 != 연산자가 어떤 일을 하는 것인지를
우리가 명시적으로 재정의 할 수 있는데,
위와 같이 하면 !=를 하더라도 참조값을 비교하는게 아니라
실제 안에 들어가 있는 y, x를 이용해 비교하게 됩니다.

0

안유선님의 프로필 이미지
안유선
질문자

감사합니다!

안유선님의 프로필 이미지
안유선

작성한 질문수

질문하기