개인정보 포함 여부를 선택한 후 출력하세요.
2026년 정보과학 수행평가 안내 |
|||||
|---|---|---|---|---|---|
| 작성자 | 김인수 | 등록일 | 26.09.02 | 조회수 | 23 |
|
2026 정보과학 평가 안내
=========================
[프로그래밍 영역 20점] 절대평가 =========================== [알고리즘 영역 20점] 상대평가
총득점 1학년 전체학생 석차순 비율에 따라 득점
10점 상위80% 이내, 9점 80%미만 60%이상, 8점 60%미만, 최하점 3점 미참여 또는 부정행위 1차와 2차 2회 실시 20점 만점
첫 번째 도전에 아쉽게 성공하지 못한 경우 매일 아침 7:40에 한번 더 도전의 기회를 줍니다. 한번 더 도전의 기회에 성공하면 득점이 인정됩니다. 한번 더 기회는 모든 학생에게 한번 주어집니다.
1차 수행평가1 재귀함수(1점) star = '인수샘호랑이' 와 재귀함수 tiger()를 정의하여 인→수→샘→♡←호←랑←이 를 출력하는 코드를 만드시오.
star = '인수샘호랑이'
def tiger(n): if n == 3: print("♡", end="") return
print(star[n] + "→", end="") tiger(n + 1) print("←" + star[5 - n], end="")
tiger(0)
수행평가2 재귀함수(1점) 양의 정수 입력받고, 재귀함수 diamond() 정의하여 * 다이아몬드 출력하기
def diamond(n, i=1): if i > 2 * n - 1: return if i <= n: stars = 2 * i - 1 else: stars = 2 * (2 * n - i) - 1
spaces = abs(n - i) print(" " * spaces + "*" * stars) diamond(n, i + 1)
diamond(int(input('양의 정수 입력: ')))
수행평가3 재귀함수(1점) 재귀함수 이용하여 거북이로 5각별 그리기
import turtle
t = turtle.Turtle() t.shape("turtle") t.speed(3)
def star(n): if n == 0: return
t.forward(150) t.right(144)
star(n - 1)
star(5)
turtle.done()
수행평가4 재귀함수(1점) 서로소인 두 양의 정수 n, k를 입력받아 재귀함수와 거북이를 이용하여 n각별 그리기
import turtle
n = int(input("n: ")) k = int(input("k: "))
def star(n): if n == 0: return turtle.forward(200) turtle.right(360 * k / N) star(n - 1)
N = n star(n)
turtle.done()
수행평가5 재귀함수(2점) 부분점수 1점 재귀함수로 시에르핀스키 삼각형 만들기
import turtle
t = turtle.Turtle() t.speed(0)
def triangle(size): for i in range(3): t.forward(size) t.left(120)
def sierpinski(size, depth): if depth == 0: triangle(size) return
sierpinski(size / 2, depth - 1)
t.forward(size / 2) sierpinski(size / 2, depth - 1)
t.backward(size / 2) t.left(60) t.forward(size / 2) t.right(60)
sierpinski(size / 2, depth - 1)
t.left(60) t.backward(size / 2) t.right(60)
sierpinski(400, 4)
turtle.done()
수행평가6 재귀함수(2점) 부분점수1점 재귀함수로 Theodorus 와선 만들기
import turtle import math
t = turtle.Turtle() t.speed(3)
scale = 80
def theodorus(n, x, y): if n > 16: return
nx = x - y / math.sqrt(n) ny = y + x / math.sqrt(n)
t.goto(nx * scale, ny * scale) t.write("√" + str(n + 1), font=("Arial", 12))
t.goto(0, 0)
t.penup() t.goto(nx * scale, ny * scale) t.pendown()
theodorus(n + 1, nx, ny)
t.penup() t.goto(0, 0) t.pendown()
t.goto(scale, 0) t.write("1", font=("Arial", 12))
theodorus(1, 1, 0)
수행평가7 스택LIFO(1점) 여러 종류의 괄호 검사
def valid_brackets(text): stack = [] pair = {")": "(", "]": "[", "}": "{"}
for ch in text: if ch in "([{": stack.append(ch) elif ch in ")]}": if not stack or stack.pop() != pair[ch]: return False
return not stack
print(valid_brackets("{[()]}")) print(valid_brackets("([)]"))
수행평가8 스택LIFO(1점) 후위 표기식 계산
def postfix(tokens): stack = []
for token in tokens: if token.isdigit(): stack.append(int(token)) else: b = stack.pop() a = stack.pop() if token == "+": stack.append(a + b) elif token == "*": stack.append(a * b)
return stack.pop()
print(postfix(["2", "3", "+", "4", "*"]))
2차 수행평가 1 정점과 간선, 인접과 차수, 그래프 (1점) 코드와 출력을 쓰시오
vertices = [0, 1, 2, 3] edges = [(0, 1), (0, 2), (1, 3)]
degree = [0] * len(vertices)
for a, b in edges: degree[a] += 1 degree[b] += 1
print(degree)
graph = { "A": [("B", 4), ("C", 2)], "B": [("C", 1)], "C": [] }
for target, weight in graph["A"]: print("A ->", target, "가중치", weight)
출력 [2, 2, 1, 1] A -> B 가중치 4 A -> C 가중치 2
수행평가2 인접행렬과 인접리스트(1점) 코드와 출력을 쓰시오
n = 4 edges = [(0, 1), (0, 2), (1, 3)] matrix = [[0] * n for _ in range(n)]
for a, b in edges: matrix[a][b] = 1 matrix[b][a] = 1
print("인접행렬",matrix)
for row in matrix: print(row)
graph = [[] for _ in range(n)]
for a, b in edges: graph[a].append(b) graph[b].append(a)
print("인접리스트",graph)
for i in range(n): print(i, ":", graph[i])
출력 인접행렬 [[0, 1, 1, 0], [1, 0, 0, 1], [1, 0, 0, 0], [0, 1, 0, 0]] [0, 1, 1, 0] [1, 0, 0, 1] [1, 0, 0, 0] [0, 1, 0, 0] 인접리스트 [[1, 2], [0, 3], [0], [1]] 0 : [1, 2] 1 : [0, 3] 2 : [0] 3 : [1]
수행평가3 전위 순회(1점) 코드와 출력을 쓰시오
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)
print("전위순회: ") preorder("A")
출력 전위순회: A B D E C F G
수행평가4 중위 순회, 후위 순위(1점) 코드와 출력을 쓰시오
left = {"A":"B", "B":"D", "C":"F"} right = {"A":"C", "B":"E", "C":"G"}
def inorder(node): if node in left: inorder(left[node]) print(node, end=" ") if node in right: inorder(right[node])
print("\n중위순회: ") inorder("A")
def postorder(node): if node in left: postorder(left[node]) if node in right: postorder(right[node]) print(node, end=" ")
print("\n후위순회: ") postorder("A")
출력 중위순회: D B E A F C G 후위순회: D E B F G C A
수행평가 5 코흐의 눈송이(1점)
import turtle
t = turtle.Turtle() t.speed(0) t.pensize(2)
t.penup() t.goto(-300, 180) t.pendown()
def koch(n, d): if d == 0: t.forward(n) else: for angle in [60, -120, 60, 0]: koch(n / 3, d - 1) t.left(angle)
for _ in range(3): koch(600, 4) t.right(120)
수행평가 6 포락선 (1점) 직선으로 12첨 별모양 만들기
import turtle, math
t = turtle.Turtle() t.speed(0) t.hideturtle()
def rot(x, y, deg): a = math.radians(deg) return (x*math.cos(a)-y*math.sin(a), x*math.sin(a)+y*math.cos(a))
n = 24 s = 170
for ang in range(0, 360, 30): for i in range(n + 1): a = s*i/n b = s*(n-i)/n p1 = rot(a, 0, ang) p2 = rot(0, b, ang) t.penup(); t.goto(p1) t.pendown(); t.goto(p2)
turtle.done()
수행평가 7 리사주 곡선 (1점) Dynamic Lissajous Curve
import turtle, math
s = turtle.Screen() s.bgcolor("black") s.title("Dynamic Lissajous Curve") s.tracer(0)
p = turtle.Turtle() p.hideturtle() p.color("deepskyblue")
phase = 0
while True: p.clear() p.penup()
for i in range(501): t = 2 * math.pi * i / 500 p.goto(270*math.sin(3*t+phase), 190*math.sin(2*t)) if i == 0: p.pendown()
phase += .03 s.update()
수행평가 8 간단한 계산기 (1점)
수행평가 9 버튼 계산기 (2점)
================================= [주제발표 10점] 절대평가 5점, 상대평가 5점
|
|||||