inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

우선순위 큐

우선순위 큐 의 개념

296

제빈

작성한 질문수 4

0

안녕하세요 루키스님.

C++ 공부하다가 C# 넘어와서 배우는 중입니다.

우선순위 큐 강의로 처음 C# 우선순위 큐를 접하게 되었는데 C++에서 말하는 우선순위 큐와 조금 다른 것 같아서, 이를 이해하는데 어떻게 이해해야할지 감을 잡기가 어렵습니다.

구현해주신 우선순위 큐는 값들을 Add만 한 시점에서는 완벽한 우선순위 큐가 아닌 것으로 보입니다. 아무래도 Heap구조로 되어 있으니 왼쪽 브랜치와 오른쪽 브랜치의 비교가 완전하게 진행되진 않으니까요. 그래서 Add가 끝난 시점에 디버깅 포인트를 잡아놓고 값을 들여다보면 값들이 완전한 순서로 나열되어 있진 않습니다. 

Pop을 통해 최대값/최소값을 뽑는데에는 최고의 방법이 맞지만 이 우선순위 큐의 용도가 그저 최대값/최소값을 쓰기 위한 용도라고 이해해야하는 건지, 아니면 C++ 에서 말하는 우선순위 큐 처럼 이해해도 무방한건지 헷갈립니다.

이전 강의 Heap 이론에서 조금 더 공부했을 때, MaxHeap과 MinHeap 개념이 있는 걸 알게되었는데요, 이 우선순위 큐가 MaxHeap과 같은 개념인 것으로 보여서, 여기서 또 헷갈렸습니다.

강의에 대해 의심하거나 하는 의도가 전혀 없고 절대 아닙니다! 그저 저는 게임개발을 배우고 있고 이 우선순위 큐가 C#에서 이런 구현방식으로 이용되기 때문에 이 방식으로 알려주시는 건지 궁금했고, C++의 우선순위 큐와 지금 알려주신 우선순위 큐의 개념이 조금 달라 어떻게 이해해야하는지 도움을 받고 싶어서 질문하는 것 뿐입니다. 또 MaxHeap과 같은 구조/이론 이라고 이해해도 되는지도 여쭤보고 싶습니다.

강의 잘 보고 있습니다 (: 좋은 강의 감사합니다!

C#

답변 1

4

Rookiss

그래서 Add가 끝난 시점에 디버깅 포인트를 잡아놓고 값을 들여다보면 값들이 완전한 순서로 나열되어 있진 않습니다. 

-> '나열' 되어 있다는 것이 어떤 의미인지 모르겠습니다.
힙트리을 배열로 표현하는 것이지,
데이터가 배열에서 '나열'
되어 저장되는 것은 아닙니다.
그리고 애당초 이진평행트리가 아니기 때문에 
부모/자식 관계에 대해서만 조건이 있지
왼쪽 오른쪽에 대해서 특별한 조건이 있진 않습니다.

Pop을 통해 최대값/최소값을 뽑는데에는 최고의 방법이 맞지만 이 우선순위 큐의 용도가 그저 최대값/최소값을 쓰기 위한 용도라고 이해해야하는 건지, 아니면 C++ 에서 말하는 우선순위 큐 처럼 이해해도 무방한건지 헷갈립니다.

-> C++에서 말하는 PriorityQueue랑 현재 다루는 PriorityQueue랑은 100% 동일한 내용입니다. C++에서는 std::priority_queue<T>를 사용하면 되고요. PQ는 원래 최소 혹은 최대값을 다루는데 최적화된 자료구조입니다.

이전 강의 Heap 이론에서 조금 더 공부했을 때, MaxHeap과 MinHeap 개념이 있는 걸 알게되었는데요, 이 우선순위 큐가 MaxHeap과 같은 개념인 것으로 보여서, 여기서 또 헷갈렸습니다.

-> PriorityQueue를 어떻게 사용할지에 따라 Max/Min Heap 둘다 될 수 있습니다. 말 그대로 비교 조건만 반대로 하면 Min Heap이 되는 것이죠. 

그저 저는 게임개발을 배우고 있고 이 우선순위 큐가 C#에서 이런 구현방식으로 이용되기 때문에 이 방식으로 알려주시는 건지 궁금했고, C++의 우선순위 큐와 지금 알려주신 우선순위 큐의 개념이 조금 달라 어떻게 이해해야하는지 도움을 받고 싶어서 질문하는 것 뿐입니다

-> 100% 동일한 개념입니다.

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

0

170

2

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

0

86

1

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

0

66

1

parent를 Pos타입으로 만든 이유

0

74

1

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

0

133

1

격자 생성 안됨 무한루프

0

113

1

BFS 질문

0

143

2

격자 무한 출력

0

166

2

A* 의 PriorityQueue 관련 질문입니다

0

154

2

vscode에서 원그리기

0

179

1

환결설정 강의 원 그리기

0

122

1

15-17분

0

85

1

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

0

140

2

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

0

209

1

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

0

167

1

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

0

150

1

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

0

142

1

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

0

174

1

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

0

271

1

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

0

201

2

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

0

227

1

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

3

307

2

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

0

243

2

맵 만들기 오류

0

177

1