2022 개정 교육과정 · 고등학교 정보과학 · 2학기 1차고사 이전

Ⅰ 프로그래밍 · Ⅱ 데이터 구조
10차시 압축형 연간 계획서

총 12차시 중 10차시는 교과서 Ⅰ·Ⅱ단원의 전 개념과 필수 코드를 학습하고, 마지막 2차시는 학습 내용 정리와 수행평가로 운영하도록 설계한 수업 계획이다.
Ⅰ단원 4차시 Ⅱ단원 6차시 성취기준 7개 전부 반영 매 차시 개념·코드·문제 해결·형성평가 1차고사 대비 누락 방지형

1. 운영 개요

전체 수업
12차시
1차고사 이전 2학기 운영
교과 학습
10차시
Ⅰ 프로그래밍 + Ⅱ 데이터 구조
정리·보충
1차시
개념망, 코드 추적, 오개념 보정
수행평가
1차시
통합 문제 해결 프로그래밍
압축 운영 원칙: 교과서의 소단원 순서는 유지하되, 설명 중심 수업을 줄이고 ‘핵심 개념 20분 → 코드 실행·추적 20분 → 변형 문제 25분 → 형성평가 10분’의 공통 구조로 운영한다. 모든 차시에서 이전 차시 개념을 코드 안에 다시 사용하여 반복 노출한다.

단원별 시간 배당

단원교과서 범위차시배당 근거
Ⅰ. 프로그래밍함수, 재귀 함수, 반복 구조와 재귀 구조1~4차시함수 1차시 + 재귀 함수 2차시 + 구조 비교·통합 1차시
Ⅱ. 데이터 구조큐, 스택, 그래프, 트리5~10차시선형 구조 3차시 + 비선형 구조 3차시
정리·평가Ⅰ·Ⅱ단원 통합11~12차시개념 정리 1차시 + 수행평가 1차시

2. 2022 고등학교 정보과학 성취기준 전체 반영

[12정과01-01] 함수 정의와 호출의 원리를 이해하고, 매개변수를 활용한 함수 프로그램을 작성한다.
[12정과01-02] 주어진 문제에서 적용할 수 있는 재귀관계를 파악하고, 재귀구조를 활용하여 프로그램을 작성한다.
[12정과01-03] 반복구조와 재귀구조를 활용하여 문제를 해결하고, 두 방식의 차이를 비교·분석한다.
[12정과02-01] 스택과 큐의 원리를 이해하고, 순차적인 데이터 구조를 이용하여 스택과 큐를 구현한다.
[12정과02-02] 스택, 큐를 활용하여 문제를 효율적으로 해결하는 프로그램을 작성한다.
[12정과02-03] 인접행렬과 인접리스트를 활용하여 트리와 그래프를 구현한다.
[12정과02-04] 트리, 그래프를 활용하여 문제를 효율적으로 해결하는 프로그램을 작성한다.

성취기준-차시 연계표

성취기준주 학습 차시보강·재확인 차시최종 확인 방법
[12정과01-01]12, 4매개변수·반환값·변수 범위를 포함한 함수 작성
[12정과01-02]2, 34종료 조건과 재귀 관계를 직접 설계
[12정과01-03]411, 12동일 문제의 반복/재귀 구현 및 비교
[12정과02-01]5, 67리스트와 라이브러리로 큐·스택 구현
[12정과02-02]6, 710, 12실생활·수식·탐색 문제에 구조 선택
[12정과02-03]8, 910인접행렬·인접리스트 구현 및 변환
[12정과02-04]8~1012그래프·트리 기반 문제 해결 프로그램

3. 10차시 전체 배당표

차시대단원·중단원핵심 개념필수 코드 산출물성취기준
1Ⅰ-01 함수정의, 호출, 복귀, 매개변수, 반환값, 지역·전역 변수4종 함수 + 변수 범위 실험01-01
2Ⅰ-02 재귀 함수 ①재귀 정의, 호출 스택, 종료 조건, 단일 호출카운트다운, 합, 팩토리얼01-02
3Ⅰ-02 재귀 함수 ②매개·전역 변수, 다중 호출, 피보나치, 하노이 탑피보나치, 하노이 탑, 호출 횟수01-02
4Ⅰ 통합반복 구조와 재귀 구조 비교, 재귀 문제 해결합·팩토리얼·피보나치 반복/재귀 비교01-01~03
5Ⅱ-01 큐FIFO, front/rear, 삽입·삭제, 리스트·deque큐 직접 구현 + deque 구현02-01
6Ⅱ-01 스택LIFO, top, push/pop, 리스트 구현스택 구현, 괄호 검사, 뒤집기02-01,02
7Ⅱ 선형 구조 통합큐·스택 선택 기준, 응용 문제, 상태 추적프린터 큐, 후위 표기/미로 경로02-01,02
8Ⅱ-02 그래프정점·간선, 방향/무방향, 가중치, 인접행렬·리스트그래프 2방식 구현, 순회 기초02-03,04
9Ⅱ-02 트리루트·부모·자식·리프·깊이·높이, 표현·순회트리 인접리스트, 전위·중위·후위 순회02-03,04
10Ⅱ 통합그래프·트리 활용, BFS/DFS 연결, 구조 선택BFS·DFS, 연결 요소/경로 탐색02-02~04

4. 차시별 상세 교수·학습 계획

1차시 · 함수의 정의와 호출 및 함수 설계
Ⅰ-01 전체 압축

개념

  • 함수의 필요성: 분해, 추상화, 재사용, 유지보수
  • def, 함수 이름, 매개변수, 인수, 함수 본문, 호출, 복귀
  • 반환값이 없는 함수와 있는 함수, 단일·다중 매개변수, 기본 흐름
  • 지역 변수, 전역 변수, 이름의 유효 범위, global 사용 시 주의

수업 활동

  • 호출 전·후 실행 순서를 화살표로 추적
  • 함수를 사용하지 않은 코드와 함수화 코드 비교
  • 매개변수와 반환값을 바꾸어 재사용성 확인

필수 코드

def greet(): print("안녕하세요") def add(a, b): return a + b def min_max(data): return min(data), max(data) total = 0 def accumulate(x): global total total += x return total

호출·복귀 추적매개변수반환값지역·전역 변수

형성평가: 실행 결과 3문항 + 함수 설계 1문항
2차시 · 재귀 함수의 정의, 호출과 복귀, 단일 호출
Ⅰ-02-1 + Ⅰ-02-2 일부

개념

  • 자기 자신을 호출하는 함수, 큰 문제와 같은 형태의 작은 문제
  • 종료 조건(base case)과 재귀 단계(recursive case)
  • 호출 프레임의 생성, 복귀 순서, 무한 재귀와 재귀 깊이
  • 매개변수 변화로 현재 상태 표현

필수 문제

  • n부터 1까지 출력
  • 1부터 n까지의 합
  • 팩토리얼
  • 문자열 역순 출력
def countdown(n): if n == 0: return print(n) countdown(n - 1) def factorial(n): if n <= 1: return 1 return n * factorial(n - 1)

종료 조건단일 호출호출 스택

형성평가: 종료 조건 찾기, 호출·복귀 순서 그리기
3차시 · 재귀 함수 설계: 다중 호출, 피보나치, 하노이 탑
Ⅰ-02-2 전체

개념

  • 재귀 관계를 식과 코드로 표현
  • 매개변수·전역 변수로 상태와 누적 결과 관리
  • 단일 호출과 다중 호출의 차이
  • 다중 호출의 중복 계산과 호출 횟수 증가
  • 하노이 탑: n-1개 이동 → 큰 원판 이동 → n-1개 이동
def fib(n): if n <= 1: return n return fib(n - 2) + fib(n - 1) def hanoi(n, start, via, end): if n == 1: print(start, "->", end) return hanoi(n - 1, start, end, via) print(start, "->", end) hanoi(n - 1, via, start, end)
형성평가: fib(5) 호출 트리, 하노이 탑 3개 이동 순서
4차시 · 반복 구조와 재귀 구조 비교 및 Ⅰ단원 통합
Ⅰ-02-3 + 대단원 마무리

개념

  • 반복 구조와 재귀 구조의 표현 방식, 종료 방식, 메모리 사용 비교
  • 반복→재귀, 재귀→반복 변환
  • 재귀가 자연스러운 문제와 반복이 효율적인 문제 구별
  • 정확성, 가독성, 호출 깊이, 중복 계산 관점의 비교

통합 과제

  • 합, 팩토리얼, 최대공약수 중 2개를 두 방식으로 구현
  • 코드 길이·호출 횟수·메모리·이해 용이성 비교표 작성
def sum_iter(n): result = 0 for i in range(1, n + 1): result += i return result def sum_rec(n): if n == 0: return 0 return n + sum_rec(n - 1)
형성평가: 구조 선택 이유를 근거와 함께 서술
5차시 · 큐의 개념, 구현, 라이브러리 활용
Ⅱ-01-1 큐 전체

개념

  • 선입선출(FIFO), front와 rear, 삽입과 삭제
  • 빈 큐, 큐의 크기, 맨 앞 데이터 확인
  • 리스트 기반 구현의 특징과 pop(0)의 이동 비용
  • collections.dequeappend, popleft
  • 대기열, 작업 처리, 순서 보존 문제
from collections import deque q = deque() q.append(10) q.append(20) front = q[0] removed = q.popleft() # 리스트로 원리 구현 queue = [] queue.append(1) queue.append(2) queue.pop(0)
형성평가: 연산 후 큐 상태 추적 + 직접 구현
6차시 · 스택의 개념, 구현, 문제 해결
Ⅱ-01-2 스택 전체

개념

  • 후입선출(LIFO), top, push, pop, peek
  • 리스트의 append, pop으로 구현
  • 함수 호출과 스택의 관계
  • 문자열 뒤집기, 괄호 검사, 실행 취소, 후위 표기
def is_valid_parentheses(text): stack = [] for ch in text: if ch == '(': stack.append(ch) elif ch == ')': if not stack: return False stack.pop() return not stack
형성평가: 잘못된 괄호 문자열 반례 찾기
7차시 · 큐·스택 통합 응용과 구조 선택
Ⅱ-01 중단원 마무리

개념·활동

  • 문제의 데이터 입·출력 순서로 적절한 구조 결정
  • 큐와 스택의 공통점·차이점 비교
  • 언더플로, 빈 구조 검사, 연산 순서 오류
  • 프린터 대기열 또는 카드 버리기 문제
  • 괄호 검사 또는 후위 표기 계산 문제
from collections import deque def printer_queue(priorities): q = deque(enumerate(priorities)) order = [] while q: item = q.popleft() if any(item[1] < x[1] for x in q): q.append(item) else: order.append(item[0]) return order
형성평가: 같은 자료를 큐와 스택에 넣었을 때 출력 순서 비교
8차시 · 그래프의 개념, 표현, 구현, 활용
Ⅱ-02-1 그래프 전체

개념

  • 정점, 간선, 인접, 차수, 경로, 연결
  • 방향·무방향 그래프, 가중·비가중 그래프
  • 인접행렬과 인접리스트의 구조와 장단점
  • 정점·간선 추가, 이웃 정점 조회
  • 교통망, 친구 관계, 연결 관계 모델링
n = 5 matrix = [[0] * n for _ in range(n)] edges = [(0,1), (0,2), (1,3), (2,4)] for a, b in edges: matrix[a][b] = matrix[b][a] = 1 graph = [[] for _ in range(n)] for a, b in edges: graph[a].append(b) graph[b].append(a)
형성평가: 행렬↔리스트 변환, 공간 사용 비교
9차시 · 트리의 개념, 표현, 구현, 순회
Ⅱ-02-2 트리 전체

개념

  • 루트, 부모, 자식, 형제, 리프, 서브트리, 깊이, 높이
  • 트리와 일반 그래프의 관계, 순환이 없는 연결 구조
  • 인접리스트 및 자식 리스트 표현
  • 이진 트리의 전위·중위·후위 순회
  • 파일 시스템, 조직도, 식 구조 활용
tree = { 'A': ['B', 'C'], 'B': ['D', 'E'], 'C': ['F', 'G'], 'D': [], 'E': [], 'F': [], 'G': [] } def preorder(node): print(node, end=' ') for child in tree[node]: preorder(child)
형성평가: 주어진 트리의 순회 결과 작성
10차시 · 그래프·트리 통합 문제 해결과 Ⅱ단원 마무리
Ⅱ-02 중단원·대단원 마무리

개념·활동

  • 그래프/트리, 인접행렬/인접리스트 선택 기준
  • 큐를 이용한 너비 우선 탐색, 스택·재귀를 이용한 깊이 우선 탐색
  • 방문 여부 배열, 중복 방문 방지, 연결 요소와 경로 탐색
  • Ⅰ단원 재귀와 Ⅱ단원 자료 구조의 연결
  • 1차고사 범위 전체 개념망 완성
from collections import deque def bfs(graph, start): visited = [False] * len(graph) q = deque([start]) visited[start] = True order = [] while q: v = q.popleft() order.append(v) for nxt in graph[v]: if not visited[nxt]: visited[nxt] = True q.append(nxt) return order def dfs(graph, v, visited, order): visited[v] = True order.append(v) for nxt in graph[v]: if not visited[nxt]: dfs(graph, nxt, visited, order)
형성평가: BFS·DFS 방문 순서와 사용 구조 설명

5. 교과서 전 개념·필수 코드 누락 방지 점검표

Ⅰ. 프로그래밍
교과서 항목개념 요소코드 요소차시
함수의 정의함수 필요성, def, 이름, 본문인수 없는 함수1
함수의 호출과 복귀호출 흐름, 복귀 지점호출 전·후 출력 추적1
반환값과 매개변수인수/매개변수, return, 다중 반환계산·최솟값/최댓값 함수1
지역·전역 변수변수 범위, global누적값 함수, 범위 실험1
재귀 함수 정의자기 호출, 종료 조건카운트다운, 합, 팩토리얼2
재귀 호출과 복귀호출 스택, 복귀 순서호출 단계 추적2
매개·전역 변수 사용상태 전달, 누적 관리재귀 누적·호출 횟수2~3
단일·다중 호출호출 트리, 중복 계산피보나치3
반복·재귀 비교표현, 종료, 메모리, 효율동일 문제 2방식 구현4
재귀 문제 해결재귀 관계, 문제 분해하노이 탑, 최대공약수 등3~4
Ⅱ. 데이터 구조
교과서 항목개념 요소코드 요소차시
큐의 개념FIFO, front/rear, 삽입·삭제상태 추적5
큐의 구현리스트, dequeappend, pop(0), popleft5
큐 활용대기열, 순서 처리프린터 큐/카드 문제5,7
스택의 개념LIFO, top, push/pop상태 추적6
스택의 구현리스트 기반append, pop, peek6
스택 활용괄호, 역순, 후위식괄호 검사6,7
그래프의 개념정점, 간선, 방향, 가중치, 경로입력 모델링8
그래프의 표현인접행렬, 인접리스트양방향 간선 저장8
그래프의 구현정점·간선 추가, 이웃 조회행렬/리스트 변환8
그래프 활용연결·경로·순회BFS, DFS8,10
트리의 개념루트, 부모·자식, 리프, 깊이·높이구조 추적9
트리의 표현인접리스트, 자식 리스트트리 저장9
트리의 구현재귀 순회전위·중위·후위9
트리 활용계층 구조, 경로, 탐색서브트리/순회 문제9,10

✓ 교과서 목차의 모든 소단원 및 2022 개정 성취기준의 핵심 내용 요소를 1회 이상 직접 구현하고, 2회 이상 재사용하도록 배치함.

6. 매 차시 평가 및 1차고사 연계

평가 유형운영내용비율 예시
진단 확인수업 시작 5분전 차시 코드 1문항, 핵심 용어 2문항피드백용
코드 추적매 차시변수, 자료 구조 상태, 함수 호출·복귀, 방문 순서30%
코드 완성매 차시빈칸, 오류 수정, 연산 추가30%
문제 해결차시 후반새 상황에 적합한 함수·자료 구조를 선택하여 구현30%
설명·비교4·7·10차시반복/재귀, 큐/스택, 행렬/리스트 비교10%

1차고사 문항 구성 권장

7. 11~12차시 운영안

11차시 · 학습 내용 정리
  • Ⅰ·Ⅱ단원 전체 개념 지도 작성
  • 성취기준별 핵심 문제 1개씩 해결
  • 함수→재귀→스택→DFS, 큐→BFS 연결 구조 정리
  • 오답 유형별 보충: 종료 조건, 변수 범위, 빈 구조, 방문 처리
  • 1차고사형 코드 추적·서술 문제 풀이
12차시 · 수행평가
  • 주제: 관계망 또는 미로 탐색 프로그램
  • 필수 요소: 함수 2개 이상, 큐 또는 스택, 그래프 또는 트리
  • 선택 요소: 재귀 DFS와 반복 DFS 비교
  • 산출물: 소스 코드, 실행 결과, 구조 선택 이유, 테스트 결과
  • 평가: 정확성 35, 구조 활용 25, 코드 품질 20, 설명 10, 테스트 10

8. 수업 운영을 위한 최소 필수 준비물