레야몬
[C언어] 1927번 최소힙 - 힙 본문
#include <stdio.h>
#define SWAP(x, y) do{int tmp; tmp=x; x=y; y=tmp;}while(0)
#define MAX_N 100000
typedef struct _heap { //힙 구조체
int arr[MAX_N];
int size;
} heap;
heap h;
void insert(heap* hp, int data) //힙 넣기
{
int here = ++hp->size;
while((here!=1) && (data<hp->arr[here/2])) {
hp->arr[here] = hp->arr[here/2];
here/=2;
}
hp->arr[here] = data;
}
int deleteData(heap *hp) //힙 꺼내기
{
if(!hp->size)
return 0;
int ret = hp->arr[1];
hp->arr[1] = hp->arr[hp->size--];
int parent = 1;
int child;
while(child<=hp->size) {
child =parent*2;
if(child < hp->size && hp->arr[child]>hp->arr[child+1])
child++;
if(hp->arr[hp->size] <= hp->arr[child]) break;
SWAP(hp->arr[parent], hp->arr[child]);
parent = child;
}
return ret;
}
int main()
{
int N, x;
int i;
scanf("%d", &N);
for(i=0; i<N; i++) {
scanf("%d", &x);
if(!x) //0이면 힙에서 숫자 꺼내기
printf("%d\n", deleteData(&h));
else //아니면 힙에 숫자 추가하기
insert(&h, x);
}
return 0;
}
힙이라는 자료구조를 쓰라고 해서 힙을 공부했다.
28ms가 나왔고 똑같이 힙을 쓴 다른 사람 코드를 봤었는데 솔직히 코드의 차이점을 잘 모르겠다....
참고한 사이트는 아래에 있다.
<자료구조 힙 구현>
https://reakwon.tistory.com/42
[자료구조] 그림으로 쉽게 보는 힙(Heap) 개념과 코드
힙(Heap) 개념 힙이라는 자료구조는 무엇일까요? 힙은 일종의 트리로 수의 집합에서 가장 작은 수(키)나 가장 큰 수만을 자주 꺼내올때 유용한 자료구조입니다. 우리는 어떤 정수형 배열이 있다고
reakwon.tistory.com
<똑같은데 시간 차이가 나는 코드(풀어야 볼 수 있습니다.)>
https://www.acmicpc.net/source/14903489
로그인
www.acmicpc.net
<구조체 초기화 하는 법>
https://dojang.io/mod/page/view.php?id=438
C 언어 코딩 도장: 52.1 구조체와 메모리를 간단하게 0으로 설정하기
52 구조체와 메모리 활용하기 구조체도 변수를 선언하거나 메모리를 할당하면 결국 메모리 공간을 차지하게 되므로 메모리 관련 함수도 사용할 수 있게 됩니다. 이번에는 메모리 함수를 사용하
dojang.io
※현재 고등학교 등교중인 학생입니다. 이제 알고리즘을 본격적으로 공부하기 시작해서 아직 초보입니다. 혹시 제가 잘못 알고있는 점이나 더 좋은 풀이 방법이 있어 댓글에 남겨주시면 감사히 하나하나 열심히 읽어보겠습니다. 좋아요, 단순한 댓글 한마디라도 저에겐 큰 힘이 됩니다! 감사합니다.
'알고리즘 > 백준' 카테고리의 다른 글
[C언어] 2630번 색종이 만들기 - 분할 정복, 재귀 (0) | 2022.08.26 |
---|---|
[C언어] 2606번 바이러스 - 인접 그래프, BFS (0) | 2022.08.26 |
1764번 듣보잡 - 해시, 정렬, 이분탐색 (0) | 2022.08.24 |
1697번 숨바꼭질 - BFS (0) | 2022.08.23 |
1620번 나는야 포켓몬 마스터 이다솜 - 해시 (0) | 2022.08.23 |