2026년 10월 25일 일요일 공식 데이터 최종 확인 2026-10-02 전체 시험일정

MORNINGSTUDY CBT

2026년 국가직 7급 제2차 알고리즘 기출 풀기

2026 국가직 7급 제2차 알고리즘 기출 25문제를 CBT로 풀고 자동 채점, 문항별 정답, 합격선 정보를 확인하세요.

문항
25문제
권장 시간
25분
채점
100점 환산

2026년 9월 19일 시행한 나책형 25문항입니다. 정답은 9월 30일 공개된 공식 최종정답 기준입니다. 권장 25분은 문항당 1분의 연습 기준이며 공식 과목별 제한시간을 뜻하지 않습니다. 그래프·트리·파이썬 코드와 보기의 원문을 제공합니다.

풀이 진행 0 / 25
  1. 011번 원문 시험지
    1. 다음 중 레드-블랙 트리(red-black tree)의 특성으로 옳은 것만을 모두 고르면? ㄱ. 모든 노드는 레드 또는 블랙이다. ㄴ. 루트 노드는 레드이다. ㄷ. 레드 노드의 자식 노드는 항상 블랙이다. ㄹ. 모든 리프 노드(NIL)는 레드이다. ①ㄱ, ㄴ ②ㄱ, ㄷ ③ㄴ, ㄷ ④ㄷ, ㄹ
  2. 022번 원문 시험지
    2. 동적 계획법(dynamic programming)에 대한 설명으로 옳지 않은 것은? ①부분 문제들 사이에는 의존적 관계가 없다. ②동일한 부분 문제들을 다시 풀지 않도록 하기 위해 부분 문제들의 해를 저장한다. ③주어진 문제를 작은 문제로 나누어 해결하고 이를 이용하여 원래 문제의 해를 도출한다. ④이 기법을 적용할 수 있으려면 최적성의 원리(principle of optimality)가 성립하여야 한다.
  3. 033번 원문 시험지
    3. 스택(stack)의 특징에 대한 설명으로 옳지 않은 것은? ①나중에 들어온 데이터가 먼저 나가는 후입 선출 구조(LIFO, Last-In First-Out)로 입출력이 일어난다. ②제일 먼저 입력된 데이터가 맨 아래에 쌓이고 가장 최근에 입력된 데이터가 가장 위에 쌓이는 구조로 되어 있다. ③함수 호출에서 복귀주소를 기억하는 데 스택을 사용하고, 함수는 수행이 끝나면 최근에 자신을 호출한 함수로 돌아간다. ④push 연산은 스택에서 하나의 요소를 제거하는 연산으로 top이 가리키는 요소를 스택에서 꺼내서 외부로 건네주는 연산이다.
  4. 044번 원문 시험지
    4. 다음 중 안정적 정렬(stable sort) 알고리즘에 해당하는 것만을 모두 고르면? ㄱ. 버블 정렬(bubble sort) ㄴ. 힙 정렬(heap sort) ㄷ. 삽입 정렬(insertion sort) ㄹ. 계수 정렬(counting sort) ①ㄴ, ㄷ ②ㄴ, ㄹ ③ㄱ, ㄴ, ㄷ ④ㄱ, ㄷ, ㄹ
  5. 055번 원문 시험지
    5. 다음 이진 트리(binary tree)의 단말 노드(leaf node) 개수와 간선(edge) 개수는? 원문 트리 간선은 A-B, A-C, B-D, B-E, C-F, E-G, E-H이다. 선지의 단말 노드 개수와 간선 개수는 각각 ①3,7 ②3,8 ③4,7 ④4,8이다.
  6. 066번 원문 시험지
    6. 다음 설명에 해당하는 알고리즘 기법은? ○깊이 우선 탐색(DFS, Depth First Search)이 기본 골격이다. ○해를 찾는 도중에 해가 아니면 되돌아가서 다시 해를 탐색한다. ○최적화(optimization) 문제와 결정(decision) 문제를 해결할 수 있다. ①백 트래킹(back tracking) ②k-NN(k-Nearest Neighbors) ③그리디(greedy) 알고리즘 ④분할 정복(divide-and-conquer) 알고리즘
  7. 077번 원문 시험지
    7. 다음 중 문자열 매칭 알고리즘에 해당하는 것만을 모두 고르면? ㄱ. 벨만 포드(Bellman Ford) ㄴ. 보이어-무어(Boyer-Moore) ㄷ. 다익스트라(Dijkstra) ㄹ. KMP(Knuth, Morris, Pratt) ①ㄱ, ㄴ ②ㄱ, ㄷ ③ㄴ, ㄷ ④ㄴ, ㄹ
  8. 088번 원문 시험지
    8. 다음 그래프에서 정점 A부터 깊이 우선 탐색을 수행할 때 가능한 정점들의 방문 순서로 옳은 것은? ①A →B →E →F →D →C ②A →B →D →C →E →F ③A →D →B →E →F →C ④A →D →F →E →B →C 원문 무방향 그래프 간선은 A-B, A-C, A-D, B-D, B-E, D-F, C-F이다.
  9. 099번 원문 시험지
    9. 다음 그래프에 대해 정점 A를 시작으로 프림(Prim) 알고리즘을 수행했을 때, 생성된 최소 신장 트리의 간선 개수는? ①4개 ②5개 ③6개 ④7개 원문 무방향 가중 그래프 간선은 A-B(2), A-D(4), D-B(4), D-E(2), B-E(3), B-C(4), B-F(1), E-F(5), C-F(5)이다.
  10. 1010번 원문 시험지
    10. 다음 설명에 해당하는 정렬 알고리즘은? ○배열을 정렬된 앞부분과 정렬되지 않은 뒷부분으로 나누어 처리한다. ○최선의 경우 시간 복잡도는 O(n)이며 최악의 경우 시간 복잡도는 O(n²)이다. ①삽입 정렬 ②버블 정렬 ③병합(merge) 정렬 ④선택(selection) 정렬
  11. 1111번 원문 시험지
    11. 다음 B-트리에 50을 삽입할 때의 설명으로 옳지 않은 것은? 각 노드는 최대 4개의 키를 가진다. 루트 키는 [3,7,20,60]이고 왼쪽부터 다섯 자식 노드의 키는 [1,2], [4,5], [8,10,15,18], [21,25,30,45], [65,66,70,72]이다. ①50이 루트 노드가 된다. ②모든 리프 노드의 레벨은 동일하다. ③50을 삽입하면 오버플로우가 발생한다. ④50을 삽입할 때 분할(split) 연산이 필요하다.
  12. 1212번 원문 시험지
    12. 다음 C언어 함수를 이용하여 rec(5)를 수행한 결괏값은? int rec(int n) { if (n <= 0) return 0; else if (n <= 3) return n; else return rec(n-4) + rec(n-3) + rec(n-2) + rec(n-1); } ①9 ②10 ③12 ④15
  13. 1313번 원문 시험지
    13. 배열 A =[5, 2, 4, 6, 1, 3]를 삽입 정렬로 오름차순 정렬할 때, 전체 과정에서 수행되는 key 값의 총 비교 횟수는? (단, 알고리즘은 다음과 같이 동작한다고 가정하며, 배열의 인덱스는 1부터 시작하고, n 값은 배열 A의 원소의 개수이다) for i ←2 to n do key ←A[i] j ←i - 1 while j ≥1 and A[j] > key do A[j+1] ←A[j] j ←j - 1 A[j+1] ←key ①12 ②13 ③14 ④15
  14. 1414번 원문 시험지
    14. 위상 정렬(topological sort)에 대한 설명으로 옳은 것은? ①깊이 우선 탐색 방식을 이용해서는 구현할 수 없다. ②하나의 그래프에 한 개의 위상 정렬만 존재한다. ③사이클이 없는 모든 종류의 그래프에 적용할 수 있다. ④간선 <i, j>를 가질 때 정점 i는 정점 j를 선행한다.
  15. 1515번 원문 시험지
    15. 다음 파이썬 프로그램의 실행 결과는? def search(arr, target): low, high = 0, len(arr) - 1 while low <= high: mid = (low + high) // 2 if arr[mid] == target: return mid elif arr[mid] < target: low = mid + 1 else: high = mid - 1 return -1 if __name__ == "__main__": a = [2, 5, 8, 12, 16, 23, 38, 56, 91] print(search(a, 23)) ①-1 ②4 ③5 ④6
  16. 1616번 원문 시험지
    16. 다음은 어떤 문자열에 포함된 문자들의 빈도수를 나타낸 표이다. 허프만(Huffman) 코드를 적용하여 인코딩한 결과의 비트 수는? 문자 a b c d e f 빈도수 7 20 10 5 50 6 ①98 ②202 ③300 ④331 빈도표는 a=7, b=20, c=10, d=5, e=50, f=6이다.
  17. 1717번 원문 시험지
    17. 기수 정렬(radix sort)에 대한 설명으로 옳은 것만을 모두 고르면? ㄱ. 비교 기반의 정렬 알고리즘이다. ㄴ. 저장공간이 추가로 필요하다. ㄷ. 안정적 정렬(stable sort) 알고리즘이다. ㄹ. 시간 복잡도는 O(n log n)이다. ①ㄱ, ㄷ ②ㄴ, ㄷ ③ㄴ, ㄹ ④ㄷ, ㄹ
  18. 1818번 원문 시험지
    18. 다음은 0 이상의 모든 정수 n에 대하여 n!을 구하는 파이썬 코드이다. (가)에 들어갈 코드로 옳지 않은 것은? def factorial(n): if (가): return 1; return n * factorial(n - 1). 첫 return 1은 if 내부에 들여쓰기되어 있고 다음 return은 함수 내부에서 if 다음에 위치한다. ①n == 0 ②n <= 0 ③n == 1 ④n <= 1
  19. 1919번 원문 시험지
  20. 2020번 원문 시험지
    20. 그래프의 임의의 한 점에서 출발하여 다른 모든 점을 한 번씩만 방문하고, 다시 시작점으로 돌아오는 경로 중 최단 경로를 찾는 문제는? ①통 채우기(bin packing) 문제 ②정점 커버(vertex cover) 문제 ③그래프 색칠하기(graph coloring) 문제 ④여행자 문제(TSP, Traveling Salesman Problem)
  21. 2121번 원문 시험지
    21. 수행 시간 분석(run time analysis)에 관한 설명으로 옳지 않은 것은? ①최악 경우(worst case) 분석은 상한의 의미가 있다. ②최선 경우(best case) 분석은 수행 시간이 가장 적은 경우를 의미한다. ③평균 경우(average case) 분석은 모든 입력에 대한 수행 시간을 알고 계산하기 때문에 시간 복잡도의 척도로 많이 사용한다. ④상각(amortized) 분석은 일련의 연산을 수행하는 데 걸리는 총 시간을 연산 수로 나누어 계산한다.
  22. 2222번 원문 시험지
    22. 문제를 해결하기 위한 알고리즘 개발 단계를 순서대로 바르게 나열한 것은? (가) 알고리즘 구현 (나) 알고리즘 설계 (다) 알고리즘 분석 (라) 알고리즘 정확성 검증 ①(나) →(다) →(라) →(가) ②(나) →(라) →(다) →(가) ③(다) →(나) →(라) →(가) ④(다) →(라) →(나) →(가)
  23. 2323번 원문 시험지
    23. 그리디 알고리즘에 해당하는 것은? ①크루스칼(Kruskal) 알고리즘 ②0/1 배낭(knapsack) 문제 풀이 ③플로이드-워셜(Floyd-Warshall) 알고리즘 ④최장 공통 부분 수열(LCS, Longest Common Subsequence) 구하기
  24. 2424번 원문 시험지
    24. 정렬 알고리즘에 대한 설명으로 옳은 것은? ①힙 정렬의 시간 복잡도는 O(n²)이다. ②퀵 정렬은 정렬할 전체 원소에 대해 정렬을 수행한 후 기준값을 중심으로 왼쪽 부분집합과 오른쪽 부분집합으로 분할한다. ③삽입 정렬은 입력에 민감한 알고리즘으로, 입력이 거의 정렬되어 있을 때 처리시간이 느리고, 입력이 역으로 정렬되어 있을 때는 최선의 경우로 빠르다. ④병합 정렬은 크기가 n인 입력을 n/2 크기로 분할하고, 각각에 대해 같은 방식으로 정렬을 수행한 후, 2개의 각각 정렬된 부분을 합병한다.
  25. 2525번 원문 시험지
    25. 다음 파이썬 프로그램의 실행 결과는? class NodeBS(object): def __init__(self, vl = None): self.vl = vl self.root = None self.lf = None self.rg = None def _ad(self, vl): nd = NodeBS(vl) if vl > self.vl: self.rg = self.rg and self.rg._ad(vl) or nd elif vl < self.vl: self.lf = self.lf and self.lf._ad(vl) or nd else: print("node duplicated") return self class Bst(NodeBS): def add_node(self, vl): if not self.root: self.root = NodeBS(vl) else: self.root._ad(vl) def order(self): current = self.root nodes, stack = [], [] while stack or current: if current: nodes.append(current.vl) stack.append(current) current = current.lf else: current = stack.pop() current = current.rg return nodes if __name__ == "__main__": bt = Bst() in_list = [6, 4, 8, 2, 5, 7, 9, 1, 3, 10] for i in in_list: bt.add_node(i) print(bt.order()) ①[6, 4, 2, 1, 3, 8, 5, 7, 9, 10] ②[6, 4, 2, 1, 5, 8, 3, 7, 9, 10] ③[6, 4, 2, 1, 3, 5, 8, 7, 9, 10] ④[6, 4, 2, 1, 5, 3, 8, 7, 9, 10] 이진검색트리 입력은 [6,4,8,2,5,7,9,1,3,10]이고 order 함수는 현재 노드를 추가한 뒤 왼쪽 가지를 방문하며 스택에서 꺼내 오른쪽 가지로 이동한다.
문항을 선택한 뒤 채점하세요

채점 후 선택한 답·정답과 해설을 문항별로 확인할 수 있습니다.

공식 원문 확인

국가공무원 채용시스템의 공개 시험문제와 최종정답을 기준으로 구성했습니다. 시험일 2026-09-19 · 검증일 2026-10-25

공식 시험문제 공지 확인하기 · 공식 최종정답 확인하기