코딩 실습
이 실습은 1장에서 익힌 컴퓨팅 사고의 4단계(문제 분해·패턴 인식·추상화·알고리즘)를 파이썬 코드로 직접 확인하는 과정입니다. 예제 코드를 먼저 실행해 동작을 확인한 뒤, 제출용 문제의 빈칸(# TODO)을 채워 제출합니다.
파이썬이 설치되어 있지 않다면 python.org에서 설치합니다. VS Code 또는 주피터 노트북(Jupyter Notebook) 중 편한 환경을 사용하세요. print("안녕, 파이썬!") 한 줄을 실행해 화면에 출력이 나오면 준비 완료입니다.
예제 코드 (함께 실행)
예제 1: 컴퓨팅 사고 4단계로 “최고 점수 학생 찾기”
아래는 반 학생 5명의 이름과 점수가 주어졌을 때, CT 4단계를 적용해 최고 점수 학생을 찾는 완성된 예제입니다.
# 데이터 정의
students = ["김민준", "이서연", "박지훈", "최유나", "정도현"]
scores = [85, 92, 78, 96, 88]
# --- 1단계: 문제 분해 ---
# (1) 최고 점수 찾기 (2) 해당 학생 이름 찾기 (3) 출력하기
# --- 2단계: 패턴 인식 ---
# 모든 점수를 한 번씩 확인해야 함 → 반복 패턴 → for 문 사용
# 현재 최고보다 높으면 갱신 → 조건 패턴 → if 문 사용
# --- 3단계: 추상화 ---
# 학생 수가 5명이든 50명이든 같은 코드로 동작하도록 설계
# --- 4단계: 알고리즘 구현 ---
best_score = scores[0] # 첫 번째 점수를 임시 최고로 설정
best_name = students[0]
for i in range(len(students)):
if scores[i] > best_score:
best_score = scores[i]
best_name = students[i]
print(f"최고 점수 학생: {best_name} ({best_score}점)")위 반복문을 파이썬 내장 함수로 한 줄로 줄일 수 있습니다.
best_idx = scores.index(max(scores))
best_name = students[best_idx]
best_score = scores[best_idx]
print(f"최고 점수 학생: {best_name} ({best_score}점)")두 방법의 결과는 같지만, 처음에는 직접 반복문을 써보며 알고리즘 흐름을 익히는 것이 중요합니다.
예제 2: 순서도를 코드로 옮기기
강의 본문의 “평균 초과 학생 수” 순서도를 파이썬으로 구현합니다.
scores = [78, 91, 65, 82, 75, 88, 70, 95, 60, 83,
77, 89, 72, 68, 91, 84, 76, 80, 55, 93,
74, 87, 69, 85, 78, 92, 63, 79, 88, 71]
# 평균 계산
avg = sum(scores) / len(scores)
print(f"반 전체 평균: {avg:.2f}점")
# 평균 초과 학생 수
count = 0
for s in scores:
if s > avg:
count += 1
total = len(scores)
print(f"평균 초과 학생 수: {count}명 / {total}명")
print(f"비율: {count/total*100:.1f}%")제출용 문제
다음 요구사항을 만족하도록 # TODO를 채워 하나의 파이썬 파일(.py)로 제출합니다.
문제 1. 컴퓨팅 사고 4단계 적용 — “편의점 계산기”
편의점에서 여러 상품을 구매할 때 총 금액을 계산하는 프로그램을 만드시오. 아래 데이터를 사용하고, CT 4단계를 주석으로 명시하시오.
items = ["아메리카노", "삼각김밥", "과자", "음료수", "껌"]
prices = [2000, 1200, 1500, 1800, 500]
qtys = [2, 3, 1, 2, 4] # 각 상품의 구매 수량
# --- 1단계: 문제 분해 ---
# (작성하시오: 이 문제를 몇 개의 작은 문제로 나눌 수 있는가?)
# --- 2단계: 패턴 인식 ---
# (작성하시오: 어떤 패턴이 보이는가? 어떤 파이썬 구조를 쓸 것인가?)
# --- 3단계: 추상화 ---
# (작성하시오: 상품 수가 달라져도 동작하게 하려면 무엇을 일반화해야 하는가?)
# --- 4단계: 알고리즘 구현 ---
total = 0
for i in range(len(items)):
# TODO: 각 상품의 소계(prices[i] * qtys[i])를 total에 더하시오
pass
print(f"총 결제 금액: {total:,}원")문제 2. 알고리즘 효율성 비교
1부터 N까지의 홀수의 합을 구하는 두 가지 알고리즘을 완성하고, 결과가 같음을 확인하시오.
N = 100
# 방법 1: 반복문으로 하나씩 확인
total_loop = 0
for i in range(1, N + 1):
# TODO: i가 홀수일 때만 total_loop에 더하시오 (힌트: i % 2 != 0)
pass
# 방법 2: 수학 공식 사용
# 힌트: 1부터 N까지 홀수의 개수는 N//2 이고,
# 합은 (홀수 개수)^2 입니다 (N=100이면 50^2=2500)
total_formula = 0 # TODO: 수식으로 바로 계산하시오
print(f"방법 1 (반복문): {total_loop}")
print(f"방법 2 (공식): {total_formula}")
print(f"결과 동일 여부: {total_loop == total_formula}")문제 3. 나만의 알고리즘 설계 (서술형)
일상생활에서 경험할 수 있는 문제 한 가지를 직접 골라, 아래 양식에 따라 작성하시오. (코드 작성은 선택 사항이며, 의사코드나 순서도 설명으로도 충분합니다.)
선택한 문제:
1단계 - 문제 분해 (작은 문제 3개 이상 나열):
-
-
-
2단계 - 패턴 인식 (반복 또는 조건 패턴이 있는가?):
3단계 - 추상화 (어떤 요소를 일반화할 수 있는가?):
4단계 - 알고리즘 (의사코드 또는 순서도 설명):