https://www.acmicpc.net/problem/9934
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int arr[1024] = {0};
int H, cnt;
int parr[11][1024] = {0};
int N;
int num;
scanf("%d", &H);
num =(int)pow(2, H);
cnt = num - 1;
for (int i = 0; i < cnt; i++)
{
scanf("%d", &N);
arr[i] = N;
}
int level = H;
int temp[1024] = {0};
while (H > 0)
{
for (int j = 0; j < pow(2, H) - 1; j++)
{
if (j % 2 == 0)
parr[H][j] = arr[j];
else
temp[j / 2] = arr[j];
}
for (int k = 0; k < cnt / 2; k++)
{
arr[k] = temp[k];
}
H--;
}
H = level;
for (int i = 1; i <= H; i++)
{
for (int j = 0; j < pow(2, H)-1; j=j+2)
{
if (parr[i][j] == 0)
break;
printf("%d ", parr[i][j]);
}
printf("\n");
}
return 0;
}
거꾸로 생각해 보았다.
예제로 주어진 배열 1 6 4 3 5 2 7 에서 짝수 번째 index의 수만 모아 놓으면 {1,4,5,7} 이고 이를 제외한 배열은{6,3,2}이다. {6,3,2}에서 짝수 번째 index의 수만 모아 놓으면 {6,2} 이고 {3}이 남는다.
느낀점 : 처음에 좀 많이 헤맸다. 알고리즘 분류에 재귀라고 써있어서 재귀로 해보다가 힘들어서 그냥 했다.
728x90
'코테 > 백준 문제풀이' 카테고리의 다른 글
백준 1697 숨바꼭질 (1) | 2021.08.12 |
---|---|
백준 4358 생태학 (0) | 2021.08.09 |
백준 2002 추월 (0) | 2021.08.04 |
백준 2220 힙정렬 (1) | 2021.07.22 |
1599 민식어 (2) | 2021.07.21 |