C++에서는
#include <queue>
를 해주고 Java에서는
import java.util.PriorityQueue;
를 해주어 Priority Queue(우선순위 큐) 자료구조를 사용할 수 있게 해준다.
1. Priority Queue 선언
C++:
priority_queue<int> pq_int;
priority_queue<long long> pq pq_ll;
이와 같이 priority_queue<자료형>으로 선언할 수 있다.
Java:
PriorityQueue<int> pq = new PriorityQueue<>();
자바에서는 new 뒤까지 써주어야 한다.
2. 우선 순위
C++에서는 기본적으로 Priority Queue가 큰 값을 우선순위로 두지만 Java는 작은 값을 우선순위로 둔다.
예를 들어 1, 3, 5, 7이 Priority Queue 안에 들어있을 때, C++에서 첫 번째 값을 반환하는 함수인
pq.top()
는 7을 반환하고 Java에서 첫 번째 값을 반환하는 함수인
pq.peek()
는 1을 반환한다.
3. Priority Queue에서 사용되는 함수(메소드)
Priority Queue에서 사용되는 함수로는
- 요소 삽입 (push)
- 첫 번째 요소 반환
- 첫 번째 요소 삭제 (pop)
- 비어있는지 확인
가 대표적이다.
C++에서는 이렇게 쓴다.
pq.push(x); // pq에 x를 삽입 (push)
y = pq.top(); // pq의 첫 번째 요소를 반환해 y에 저장
pq.pop(); // pq의 첫 번째 요소 삭제 (pop)
pq.empty(); // pq가 비어있다면 true, 아니라면 false 반환
Java에서는 이렇게 쓴다.
pq.add(x);
pq.insert(x)
// add와 insert 둘 중 어느 것을 사용해도 된다. (push)
pq.peek(); // 첫 번째 값 반환. 만약 pq가 비어있다면 null 반환.
pq.element(); // 첫 번째 값 반환. 만약 비어있다면 예외발생.
// 기능은 같지만 필요에 따라 골라 쓰면 된다.
pq.poll(); // 첫 번째 값을 반환하면서 제거함. 만약 비어있다면 null 반환 (pop)
pq.remove(); // 첫 번째 값 제거. 만약 비어있다면 예외발생. (pop)
// 역시나 필요에 따라 골라 쓰면 된다.
pq.isEmpty() // 비어있다면 true, 아니라면 false 반환
4. 정리
아무래도 가장 중요한 차이점은 C++에선 큰 게 우선이고 Java에서는 작은 게 우선이라는 거다. ChatGPT한테 C++ 코드를 Java로 바꿔달라고 했더니 그 차이점을 몰라서인지 코드를 잘못 구현해놓은 적이 있다.
아래는 Priority Queue를 사용해야 하는 백준 문제 하나 추천.
'공부 > 코딩' 카테고리의 다른 글
FWA 2부: 플로이드 워셜 알고리즘에서 경로 복원하기 (0) | 2025.03.08 |
---|---|
FWA 1부: 플로이드-워셜 알고리즘과 주의사항 (반복문의 순서가 중요한 이유) (0) | 2025.03.06 |
고려대학교의 마이크로디그리 제도 (0) | 2025.02.16 |
[C++] 코딩할때 '\b' 문자에 관하여 (1) | 2024.12.15 |
게일 섀플리 알고리즘(Gale–Shapley algorithm) (1) | 2024.11.10 |