Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 스프링 핵심 원리
- 에러핸들링
- 토마토
- HTTP
- 제프리리처
- 우아한레디스
- redis
- Four Squares
- FIFO paging
- TCP/IP
- 윤성우 저자
- C++
- Operating System.
- 이펙티브코틀린
- 운영체제
- Spring
- inflearn
- OS
- 열혈 TCP/IP 소켓 프로그래밍
- n타일링2
- Window-Via-c/c++
- Operating System
- 2475번
- 열혈 tcp/ip 프로그래밍
- 우아한 테크 세미나
- C#
- 김영한
- 스프링 입문
- 10026번
- BOJ
Archives
- Today
- Total
나의 브을로오그으
[c++] 1927번 : 최소 힙 본문
https://www.acmicpc.net/problem/1927
#include <iostream>
using namespace std;
#define MAX_HEAP_SIZE 100000
#define ROOT 1
#define DELETE_INSTRUCT 0
template <typename T>
struct Node
{
T data;
Node(T data)
{
this->data = data;
}
};
template <typename T>
class Heap
{
public:
Heap() : mSize(0) { }
~Heap()
{
for (int i = 1; i <= mSize; ++i)
{
delete mHeap[i];
}
mSize = 0;
}
bool IsEmpty() const
{
return mSize == 0;
}
bool IsFull() const
{
return mSize == MAX_HEAP_SIZE;
}
void InsertData(const T data)
{
if (IsFull() == true)
{
cout << "heap is full!" << '\n';
return;
}
else
{
int index = ++mSize;
while ((index != ROOT) && isCompare(data, mHeap[index / 2]->data) == true)
{
mHeap[index] = mHeap[index / 2];
index /= 2;
}
mHeap[index] = new Node<T>(data);
}
return;
}
T DeleteData()
{
if (IsEmpty() == true)
{
return 0;
}
else
{
int parent = ROOT;
int child = ROOT + 1;
Node<T>* comp = mHeap[mSize--];
T delData = mHeap[ROOT]->data;
delete mHeap[parent];
while (child <= mSize)
{
if ((child < mSize) && (isCompare(mHeap[child]->data, mHeap[child + 1]->data) == false))
{
++child;
}
if (isCompare(comp->data, mHeap[child]->data) == true)
{
break;
}
mHeap[parent] = mHeap[child];
parent = child;
child *= 2;
}
mHeap[parent] = comp;
return delData;
}
return 0;
}
protected:
virtual bool isCompare(T d1, T d2) = 0;
private:
int mSize;
Node<T>* mHeap[MAX_HEAP_SIZE];
};
template <typename T>
class MinHeap : public Heap<T>
{
protected:
bool isCompare(T d1, T d2)
{
return d1 < d2;
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
MinHeap<int> heap;
int N = 0, X = 0, del = 0;
cin >> N;
for (int i = 0; i < N; ++i)
{
cin >> X;
if (X == DELETE_INSTRUCT)
{
del = heap.DeleteData();
cout << del << '\n';
}
else
{
heap.InsertData(X);
}
}
return 0;
}
'알고리즘 > BaekJoon' 카테고리의 다른 글
[c++] 1992번 : 쿼드트리 (0) | 2022.06.23 |
---|---|
[c++] 1931번 : 회의실 배정 (0) | 2022.06.22 |
[c++] 1764번 : 듣보잡 (0) | 2022.06.15 |
[c++] 1697번 : 숨바꼭질 (0) | 2022.06.14 |
[c++] 1676번 : 팩토리얼 0의 개수 (0) | 2022.06.12 |