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] | 1 | 2, 4 | 매개변수·반환값·변수 범위를 포함한 함수 작성 |
| [12정과01-02] | 2, 3 | 4 | 종료 조건과 재귀 관계를 직접 설계 |
| [12정과01-03] | 4 | 11, 12 | 동일 문제의 반복/재귀 구현 및 비교 |
| [12정과02-01] | 5, 6 | 7 | 리스트와 라이브러리로 큐·스택 구현 |
| [12정과02-02] | 6, 7 | 10, 12 | 실생활·수식·탐색 문제에 구조 선택 |
| [12정과02-03] | 8, 9 | 10 | 인접행렬·인접리스트 구현 및 변환 |
| [12정과02-04] | 8~10 | 12 | 그래프·트리 기반 문제 해결 프로그램 |
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차시 · 함수의 정의와 호출 및 함수 설계
개념
- 함수의 필요성: 분해, 추상화, 재사용, 유지보수
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차시 · 재귀 함수의 정의, 호출과 복귀, 단일 호출
개념
- 자기 자신을 호출하는 함수, 큰 문제와 같은 형태의 작은 문제
- 종료 조건(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차시 · 재귀 함수 설계: 다중 호출, 피보나치, 하노이 탑
개념
- 재귀 관계를 식과 코드로 표현
- 매개변수·전역 변수로 상태와 누적 결과 관리
- 단일 호출과 다중 호출의 차이
- 다중 호출의 중복 계산과 호출 횟수 증가
- 하노이 탑: 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차시 · 반복 구조와 재귀 구조 비교 및 Ⅰ단원 통합
개념
- 반복 구조와 재귀 구조의 표현 방식, 종료 방식, 메모리 사용 비교
- 반복→재귀, 재귀→반복 변환
- 재귀가 자연스러운 문제와 반복이 효율적인 문제 구별
- 정확성, 가독성, 호출 깊이, 중복 계산 관점의 비교
통합 과제
- 합, 팩토리얼, 최대공약수 중 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차시 · 큐의 개념, 구현, 라이브러리 활용
개념
- 선입선출(FIFO), front와 rear, 삽입과 삭제
- 빈 큐, 큐의 크기, 맨 앞 데이터 확인
- 리스트 기반 구현의 특징과
pop(0)의 이동 비용 collections.deque의append,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차시 · 스택의 개념, 구현, 문제 해결
개념
- 후입선출(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차시 · 큐·스택 통합 응용과 구조 선택
개념·활동
- 문제의 데이터 입·출력 순서로 적절한 구조 결정
- 큐와 스택의 공통점·차이점 비교
- 언더플로, 빈 구조 검사, 연산 순서 오류
- 프린터 대기열 또는 카드 버리기 문제
- 괄호 검사 또는 후위 표기 계산 문제
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차시 · 그래프의 개념, 표현, 구현, 활용
개념
- 정점, 간선, 인접, 차수, 경로, 연결
- 방향·무방향 그래프, 가중·비가중 그래프
- 인접행렬과 인접리스트의 구조와 장단점
- 정점·간선 추가, 이웃 정점 조회
- 교통망, 친구 관계, 연결 관계 모델링
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차시 · 트리의 개념, 표현, 구현, 순회
개념
- 루트, 부모, 자식, 형제, 리프, 서브트리, 깊이, 높이
- 트리와 일반 그래프의 관계, 순환이 없는 연결 구조
- 인접리스트 및 자식 리스트 표현
- 이진 트리의 전위·중위·후위 순회
- 파일 시스템, 조직도, 식 구조 활용
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차시 · 그래프·트리 통합 문제 해결과 Ⅱ단원 마무리
개념·활동
- 그래프/트리, 인접행렬/인접리스트 선택 기준
- 큐를 이용한 너비 우선 탐색, 스택·재귀를 이용한 깊이 우선 탐색
- 방문 여부 배열, 중복 방문 방지, 연결 요소와 경로 탐색
- Ⅰ단원 재귀와 Ⅱ단원 자료 구조의 연결
- 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 |
| 큐의 구현 | 리스트, deque | append, pop(0), popleft | 5 |
| 큐 활용 | 대기열, 순서 처리 | 프린터 큐/카드 문제 | 5,7 |
| 스택의 개념 | LIFO, top, push/pop | 상태 추적 | 6 |
| 스택의 구현 | 리스트 기반 | append, pop, peek | 6 |
| 스택 활용 | 괄호, 역순, 후위식 | 괄호 검사 | 6,7 |
| 그래프의 개념 | 정점, 간선, 방향, 가중치, 경로 | 입력 모델링 | 8 |
| 그래프의 표현 | 인접행렬, 인접리스트 | 양방향 간선 저장 | 8 |
| 그래프의 구현 | 정점·간선 추가, 이웃 조회 | 행렬/리스트 변환 | 8 |
| 그래프 활용 | 연결·경로·순회 | BFS, DFS | 8,10 |
| 트리의 개념 | 루트, 부모·자식, 리프, 깊이·높이 | 구조 추적 | 9 |
| 트리의 표현 | 인접리스트, 자식 리스트 | 트리 저장 | 9 |
| 트리의 구현 | 재귀 순회 | 전위·중위·후위 | 9 |
| 트리 활용 | 계층 구조, 경로, 탐색 | 서브트리/순회 문제 | 9,10 |
✓ 교과서 목차의 모든 소단원 및 2022 개정 성취기준의 핵심 내용 요소를 1회 이상 직접 구현하고, 2회 이상 재사용하도록 배치함.
6. 매 차시 평가 및 1차고사 연계
| 평가 유형 | 운영 | 내용 | 비율 예시 |
|---|---|---|---|
| 진단 확인 | 수업 시작 5분 | 전 차시 코드 1문항, 핵심 용어 2문항 | 피드백용 |
| 코드 추적 | 매 차시 | 변수, 자료 구조 상태, 함수 호출·복귀, 방문 순서 | 30% |
| 코드 완성 | 매 차시 | 빈칸, 오류 수정, 연산 추가 | 30% |
| 문제 해결 | 차시 후반 | 새 상황에 적합한 함수·자료 구조를 선택하여 구현 | 30% |
| 설명·비교 | 4·7·10차시 | 반복/재귀, 큐/스택, 행렬/리스트 비교 | 10% |
1차고사 문항 구성 권장
- 개념 이해 25%: 용어, 원리, 구조의 특징
- 실행 결과·상태 추적 30%: 함수 호출, 재귀 복귀, 큐·스택 상태, 그래프 순회
- 코드 완성·오류 수정 25%: 종료 조건, 빈 구조 검사, visited 처리
- 문제 해결·비교 분석 20%: 적절한 구조 선택과 근거, 반복·재귀 비교
7. 11~12차시 운영안
11차시 · 학습 내용 정리
- Ⅰ·Ⅱ단원 전체 개념 지도 작성
- 성취기준별 핵심 문제 1개씩 해결
- 함수→재귀→스택→DFS, 큐→BFS 연결 구조 정리
- 오답 유형별 보충: 종료 조건, 변수 범위, 빈 구조, 방문 처리
- 1차고사형 코드 추적·서술 문제 풀이
12차시 · 수행평가
- 주제: 관계망 또는 미로 탐색 프로그램
- 필수 요소: 함수 2개 이상, 큐 또는 스택, 그래프 또는 트리
- 선택 요소: 재귀 DFS와 반복 DFS 비교
- 산출물: 소스 코드, 실행 결과, 구조 선택 이유, 테스트 결과
- 평가: 정확성 35, 구조 활용 25, 코드 품질 20, 설명 10, 테스트 10
8. 수업 운영을 위한 최소 필수 준비물
- 파이썬 실행 환경: IDLE, Colab, Jupyter 또는 VS Code 중 1개
- 차시별 1쪽 핵심 개념지 + 1쪽 코드 실습지
- 교사용 실행 추적판: 함수 호출 스택, 큐·스택 상태, 그래프 방문 배열
- 학생용 공통 코드 템플릿: 입력 → 함수 정의 → 자료 구조 생성 → 처리 → 출력
- 차시 종료 3분 점검표: “설명할 수 있음 / 코드로 구현 가능 / 새 문제에 적용 가능”