코테/백준 문제풀이
백준 2220 힙정렬
밤밭황제
2021. 7. 22. 18:44
2220번: 힙 정렬
힙은 자료의 추가, 우선순위가 제일 높은 자료의 삭제가 가능한 자료구조이다. 이와 같은 힙에는 두 종류가 있는데, 각각 최소-힙, 최대-힙이다. 이 문제에서는 최대-힙을 다루기로 하자. 이와 같
www.acmicpc.net
https://www.acmicpc.net/problem/2220
#include <stdio.h>
int main()
{
int arr[100000] = {0};
int N, idx, tmp, size, numOfData;
arr[1] = 1;
numOfData = 1;
scanf(" %d", &N);
idx = 1;
for(int i= 2; i<=N-1; i++)//1~N-1까지 삽입
{
idx = numOfData + 1;
while (idx != 1 && idx /2 != 1)
{
if (i > arr[idx / 2])
{
arr[idx] = arr[idx / 2];
idx = idx / 2;
}
else
break;
}
arr[idx] = i;
numOfData += 1;
}
arr[1] = N;
arr[N] = 1;
for (int i = 1; i <= N; i++)
printf("%d ", arr[i]);
return 0;
}
swap의 횟수를 최대로 하기 위해서는 마지막 원소가 1이면 된다. N을 입력했을 때 arr[N] = 1이면 된다는 것이다.
그렇다면 이를 역순으로 생각해보자. 위의 그림을 통해 1을 배열의 첫번째 원소로 정해놓고 마지막에 1과 6을 바꿔주면 된다.
728x90