1.
배열로 구현한 최대 힙(max heap)에 키 값 <15, 10, 12, 8, 9, 7, 20>을 차례대로 삽입하였을 때, 값 7이 저장되어 있는 색인(index) 번호는? (단, 배열에 저장되는 키 값의 첫 번째 저장위치 색인 번호는 1이다)
- ①4
- ②5
- ③6
- ④7
정답 보기
정답 ③ · 해설 보기
시행 2024-10-12 · 책형 나 · 25문항 · 출처: 인사혁신처 공개 기출(공공데이터포털, 이용허락 제한 없음)
정답 ③ · 해설 보기
정답 ① · 해설 보기

정답 ④ · 해설 보기
x = x+3;’의 수행 빈도수는? (단, n은 0 이상의 정수이다)void complexity(int n){
int i, j, x = 0;
for ( i = 0; i <= n; i++ ) {
for ( j = i; j <= n; j++ )
x = x+3;
}
}정답 ④ · 해설 보기
for ( i = 1; i < n; i++ ) {
MaxData = arr[i];
for ( j = i-1; j >= 0; j-- ) {
if ( arr[j] > MaxData )
arr[j+1] = arr[j];
else
break;
}
arr[j+1] = MaxData;
}정답 ③ · 해설 보기
< 27, 5, 37, 4, 61, 11, 59, 15, 48, 20 >
정답 ① · 해설 보기
#include <stdio.h>
void RecursiveFunc(int n) {
if ( n <= 0 ) {
printf("R-%d ", n);
return;
}
printf("R-%d ", n);
if ( n%2 == 0 )
RecursiveFunc(n-2);
else
RecursiveFunc(n-1);
printf("R-%d ", n);
}
int main(void)
{
RecursiveFunc(3);
return 0;
}정답 ③ · 해설 보기
sorted = [] def merge_sort(arr, left, right): if left < right: middle = (left + right) // 2 merge_sort(arr, left, middle) merge_sort(arr, middle + 1, right) merge(arr, left, middle, right) def merge(arr, left, middle, right): global sorted i = left j = middle + 1 k = (가) while i <= middle and (나): if arr[i] <= arr[j]: sorted.insert(k, arr[i]) i = i + 1 else: sorted.insert(k, arr[j]) j = j + 1 k = k + 1 if i > middle: sorted[k:k + right - j + 1] = arr[j:right + 1] else: sorted[k:k + middle - i + 1] = arr[i:middle + 1] arr[left:right + 1] = sorted[left:right + 1]
정답 ① · 해설 보기
(가) 배열을 이용한 큐 구조체 | (나) 연결 리스트를 이용한 큐 구조체 |
typedef struct _Queue {
int front;
int rear;
int numOfData;
int queArr[50];
} QType; | typedef struct _node {
int data;
struct _node *next;
} Node;
typedef struct _Queue {
Node *front;
Node *rear;
int numOfData;
} QType; |
<조 건> | ||
○ 큐 변수는 QType q; 형태로 선언한다.
○ Enqueue 함수는 큐의 front에 데이터를 추가하는 함수로 함수 원형은 void Enqueue(QType *q, int value)이다.
○ Dequeue 함수는 큐의 rear에서 데이터를 삭제하는 함수이며, 함수 원형은 void Dequeue(QType *q)이다.
○ int형 자료의 경우 4바이트, 포인터형 자료의 경우 8바이트의 메모리 공간을 사용한다.
○ Enqueue와 Dequeue 함수에서는 배열 및 연결 리스트 특성에 맞게 필요한 메모리를 할당ㆍ회수하는 동작이 적절히 일어난다.
○ 연결 리스트에서 삭제 연산은 메모리 회수를 포함한다.
○ 구조체 변수를 메모리에 할당할 때 바이트 패딩 없이 할당한다. | ||
정답 ③ · 해설 보기
#include <stdio.h>
int main(void)
{
int i, j, test[3][4];
for ( i = 0; i < 3; i++ )
for ( j = 0; j < 4; j++ )
test[i][3-j] = i*4 + j;
printf("%d ", *(*(test + 1) + 5));
}정답 ④ · 해설 보기
#include <stdio.h>
typedef struct _data {
int value;
} DataType;
DataType *max(DataType *a) {
int i, max = a[0].value, index = 0;
for ( i = 0; i < 5; i++ )
if ( max < a[i].value ) {
max = a[i].value;
index = i;
}
return (가);
}
int main(void)
{
int i;
DataType data[5], *result;
for ( i = 0; i < 5; i++ )
scanf("%d", &data[i].value);
result = max(data);
printf("max = %d",(나));
return 0;
}정답 ① · 해설 보기
/ + a b – c d
정답 ① · 해설 보기
class Node: def __init__(self, data, next): self.data = data self.next = next class MyStack: def __init__(self): self.top = None def push(self, data): (가) self.top = n def pop(self): if self.top != None: n = self.top (나) return n.data
정답 ④ · 해설 보기
정답 ④ · 해설 보기
ListNode *searchCList(ListNode *L, int x) {
ListNode *p = L;
while ( p != L ) {
if ( p->data == x ) return p;
p = p->link;
}
return NULL;
}ListNode *searchCList(ListNode *L, int x) {
ListNode *p = L;
while ( p->link != L ) {
if ( p->data == x ) return p;
p = p->link;
}
return NULL;
}ListNode *searchCList(ListNode *L, int x) {
ListNode *p = L;
do {
if ( p->data == x ) return p;
p = p->link;
} while ( p != L );
return NULL;
}ListNode *searchCList(ListNode *L, int x) {
ListNode *p = L;
do {
if ( p->data == x ) return p;
p = p->link;
} while ( p->link != L );
return NULL;
}정답 ③ · 해설 보기
정답 ② · 해설 보기
int a[8] = {-1, 1, 2, 3, 6, 4, 7, 5};
int heapify(int *a, int n) {
int item = a[1], temp = a[n];
int i = 1, j = 2;
a[n] = 0, n = n-1;
while ( j <= n ) {
if ( j < n && a[j] > a[j + 1] ) j++;
if ( temp < a[j] ) break;
else {
a[i] = a[j];
i = j;
j = j*2;
}
}
a[i] = temp;
return item;
}0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
-1 | 2 | 3 | 4 | 6 | 5 | 7 | 0 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
-1 | 2 | 4 | 3 | 6 | 5 | 7 | 0 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
-1 | 2 | 3 | 4 | 5 | 6 | 7 | 0 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
-1 | 2 | 4 | 3 | 5 | 6 | 7 | 0 |
정답 ② · 해설 보기

정답 ③ · 해설 보기
정답 ② · 해설 보기
typedef struct TreeNode {
char data;
struct TreeNode *left;
struct TreeNode *right;
} TNode;
int count_node(TNode *n) {
if ( n == NULL ) return 0;
return (가) + count_node(n->right);
} 정답 ④ · 해설 보기
int a_search(int list[], int key, int low, int high) {
int middle;
while ( low <= high ) {
middle = (low + high)/2;
if ( key == list[middle] )
return middle;
else if ( key > list[middle] )
low = middle + 1;
else
high = middle - 1;
}
return -1;
}
정답 ② · 해설 보기
<조 건> | ||
○ 버킷의 인덱스는 0부터 시작한다.
○ 는 첫 번째 조사 위치를 결정하는 기본 해시 함수이다.
○ 는 충돌 발생 시 조사 위치 간격을 결정하는 함수이다.
○ 하나의 키 값에 대한 해시 함수 연산 중 충돌이 1번 이상 발생할 경우 번째 충돌에 대응하여 를 적용한다. | ||
<해시 함수> | ||
정답 ③ · 해설 보기

ㄱ. 가장 긴 단순 경로의 길이는 4이다.ㄴ. 진입차수가 진출차수보다 큰 정점은 1개이다.ㄷ. 완전 그래프가 되기 위해 추가로 필요한 간선의 수는 10개이다.ㄹ. 간선 <A, B>를 제거한 후 위상정렬을 수행하면 B, D, A, E, C, F 또는 B, D, A, C, E, F순으로 정점이 나열된다.
정답 ① · 해설 보기
int G[7][7] = {{ 0, 1, 1, 0, 0, 0, 0 },{ 1, 0, 1, 1, 0, 0, 0 },{ 1, 1, 0, 1, 0, 1, 0 },{ 0, 1, 1, 0, 0, 1, 0 },{ 0, 0, 0, 0, 0, 1, 0 },{ 0, 0, 1, 1, 1, 0, 1 },{ 0, 0, 0, 0, 0, 1, 0 }};




정답 ② · 해설 보기

정답 ④ · 해설 보기