1

우선순위 큐 2

우선순위 큐 2

노아의 블로그

    목차
반응형

지금까지는 우선순위 큐에서 최대값이 먼저 나오는 구조였다..

 

하지만 최소값이 먼저 나오고 싶게 할 때가 있을것이다. (최단경로 등)

 

Enqueue와 Dequeue를 할 때 < > 이 조건을 반대로 하면 될것이다..

 

하지만 이러한 구조를 건들지 않고 할 수 있는 하나의 방법이 더 있었는데

 

Enqueue를 할 때, 음수를 넣어주는 방법도 있었다.....

와..ㅋㅋ

 

음수는 수(절댓값)가 클수록 작다는 성질이 있기 때문에 -10이 제일 큰 수가 될것

 

근데 음수가 나오니까 이런 구조에서는 Dequeue를 할 때 -1을 곱해줌!

 

자 이런 방법이 있었고

 

이제 이 우선순위 큐에 int형 말고 다른 자료형이 들어오려면 어떻게 해야할까..

 

먼저, Generic 형태로 모든 자료형을 받는다 하지만 '비교' 에서 문제가 생긴다....

 

결국 순위를 부여해야 하기 때문에, 비교를 할 수 있어야 한다. 즉 여기 안에 들어오는 자료형은 모두 비교를 할 수 있어야 한다. 

 

그래서 우리는 제약 조건을 걸어야 하는데

 

IComparable을 상속받은 자료형만 들어올 수 있다는 제약을 걸었다.. 여기서 IComparable은 

 

이러하다고 하다.. 내부적으로 int, byte등 애들이 상속을 받고 있음

 

그래서 이제 나는 Ork라는 클래스를 우선순위 큐에 넣고 싶은데 도감 번호로 우선순위를 설정하기 위해서 IComparable을 상속받고 거기에 같을때 0, 클때 1, 작을때 -1을 리턴하도록 설정

 

이제 아까 구현한 우선순위 큐에서 비교를 하는 부분을 

 

Compare To 메서드로 바꾸면 잘 동작할 것!

 

잘 나오는것을 볼 수 있다.

 

그럼 아까 만들었던 오크를 여기다 넣으면?

 

이렇게 한 다음, Ork의 ToString 함수를 재정의 하고 

 

실행 해보면?

 

Ork라는 클래스도 우선순위 큐에 넣어서 잘 진행이 된다!

반응형

'컴퓨터 > 자료구조' 카테고리의 다른 글

우선순위 큐  (0) 2023.11.04
이진 트리, 힙 트리  (0) 2023.11.02
Tree 구현하기  (0) 2023.11.01