boj 11286, 11279, 1927 번 문제들을 풀면서,
최대힙으로 문제를 풀어야 할때,
최소힙으로 문제를 풀어야 할때 등이 있었는데,
이때에 c++ stl에 있는 priority_queue<int> pq; 형태로 사용시 기본으로 Max Heap(최대 힙)이 되고,
만약 최소 힙을 사용하고 싶으면 priority_queue<int, vector<int>, greater<int>> pq; 형태로 선언해야 Min Heap(최소 힙)이 된다고 하여서 그게 관하여서 한번 검색해보았다.
<첫번째>
<두번째>
<세번째>
이와 같은 내용들을 gpt를 통해 받을 수 있었는데,
위의 내용들을 보면, <첫 번째> 와 <두 번째> 의 경우는 기본적으로 내부 컨테이너가 deque로 되어있다 라는 얘기를 하고있고,
<세 번째> 는 내부 구현에 사용하는 컨테이너로 deque대신 vetor를 사용하는것이 더 효율적이라고 설명하고 있다.
위의 내용들이 내부 구현 컨테이너에 대한 정보가 상반되는 것 같아서 이에 대해서 cplusplus 사이트에서 찾아보았다.
https://cplusplus.com/reference/queue/priority_queue/?kw=priority_queue
https://cplusplus.com/reference/queue/priority_queue/?kw=priority_queue
container_typeThe second template parameter (Container)Type of the underlying container
cplusplus.com
사이트를 통해 알 수 있는 부분은, 특별하게 따로 정해주지 않으면 기본적으로 vector를 이용해서 내부 컨테이너로 이용한다고 한다.
그리고 priority_queue를 선언할때 에디터상에 이 함수에 대해서 설명이 나오는 부분을 첨부해보면,
이처럼 여기서도 <타입, 컨테이너의 타입네임=vector , compare= less> 형태로 나오는걸 볼 수 있다. 그래서 특별하게
지정해 주지 않으면 priority_queue<int> 로 선언하면, 내부 컨테이너로 vetor를 사용하고, compare 함수로 less 를 전해주는
priority_queue가 되는 것이다.
이를 통해 이해해볼 수 있는것은, 기본적으로 최대힙의 경우, 원래 풀로 쓰면,
priority_queue<int, vector<int>, less<int>> 형태로 되는 것이고,
이걸 간략하게
priority_queue<int> 로 써서 가장 기본적으로 최대힙으로 사용하는 형태이고, 이걸 최소 힙으로 사용하고 싶으면, compare 함수를 바꾸어 주어야 하기 때문에, 그걸 작성하기 위해서
priority_queue<int, vector<int>, greater<int>> 로 써주어야 하는 것으로 생각된다.
혹시 priority_queue<int, , greater<int>> 로 사용할 수 있을까 하고 실험을 해보면,
현재 내가 사용하고 있는 상황에서는 되지 않는다.
gpt에 다시한번 priority_queue의 내부 구현에 컨테이너를 무엇을 사용하는지 물어보았는데 이번엔 답이 또 말이 바뀌었다.
gpt를 기본적으로 언어의 문법을 이해하고 배우는데 많이 활용하고 있는데, 너무 믿지 말도록 하자.
가장 기본적인건 결국 컴파일러 상에서 요구하는 기본 요소들에 대해서 함수에 제시된 설명을 통해 잘 파악하도록 하고,
그 이후에는 cplusplus 사이트를 통해서 공부하도록 하자. gpt를 통해 얻을 결과는 너무 맹신하지 않도록 주의하자.
+++++++++++++++++++++++++
추가적으로, 기본적으로 vetor<int> 를 내부 컨테이너로 사용하고, 사용할 수 있는 경우가 vector와 deque라고 했으니, deque<int>를 넣어보면 사용할 수 있겠구나 싶어서 넣어보았다.
이와 같이 아무런 문제없이 잘 작성됨을 확인할 수 있었다.
그리고 내부 컨테이너를 deque<int> 로 바꾼 코드를 11279 문제에 제출해보았는데 통과하였다.
**기본 내부 컨테이너는 vector로 되어있다는것, 그리고 deque로 바꾸어서 사용할 수 있다는 것을 기억하고,
priority_queue의 완전한 형태가
priority_queue<int, vector<int>, greater<int>> 형태 라는걸 이해하고 사용하도록 하자.
'알고리즘 > BOJ' 카테고리의 다른 글
boj 11286 절댓값 힙 문제를 통해서 다시 접하게된 compare 함수 형태와 작성 요령에 관하여. (0) | 2023.06.27 |
---|---|
if문과 else if와 else를 사용하는것이 if if if 형태로 작성하는 형태와의 차이점. (0) | 2023.06.27 |
boj 23326번 문제를 통해 보는 switch 문에서 맨 마지막 case의 break의 생략. (0) | 2023.06.26 |
boj 23326 번 문제를 통해 접하게된 원형 배열에서의 인덱스 표시에 관하여. curr=(curr+tmp-1)% N +1; 형태의 코드에 대해 (0) | 2023.06.26 |
c++ map 에서 iterator를 사용할때 볼 수 있는 '->' (arrow operator)에 관하여. (0) | 2023.06.25 |