문제 분해 — 프로그램은 조각으로 만든다
큰 프로그램은 바로 만들 수 있는 작은 조각으로 나눈 뒤 하나씩 만듭니다.
1개념 정리
정한다
입력받는다
비교한다
보여준다
조각 1개 = 함수(function) 1개
좋은 분해인지 세 가지로 점검합니다
받는다
준다
정한다
받는다
한다
준다
보여준다
띄운다
가린다
보여준다
만든다
1 올린다
낸다
막막한 조각은 한 번 더 나눕니다. 세 가지를 모두 통과하면 나누기를 멈춥니다.
2예제 풀이 — 숫자 맞히기 게임 분해
힌트를 받으며 숫자를 맞히는 게임을 나눕니다.
"컴퓨터가 1~100 사이 숫자를 하나 정하면, 사용자가 그 숫자를 맞힐 때까지 추측을 입력하고, 컴퓨터는 매번 '더 큽니다/더 작습니다' 힌트를 준다."
무작위(랜덤)로
정한다
입력받는다
1 늘린다
비교한다
보여준다
횟수를 보여준다
조각마다 ‘~한다’ 동작 한 개
- ✓ 빠짐없이문장 속 일이 모두 조각에 있습니다.
- ✓ 겹치지 않게비교(4)와 보여주기(5)는 서로 다른 일입니다.
- ✓ 바로 시작조각마다 첫 동작이 바로 떠오릅니다.
3따라 하기 — 가위바위보 게임 분해
예제와 같은 순서로 가위바위보 게임을 나눕니다.
입력받는다
무작위로 정한다
가린다
기록한다
횟수를 보여준다
보여준다
‘정정당당하게’, ‘재미있게’ 같은 목표나 마음가짐은 조각이 아닙니다.
4스스로 풀기
난이도를 골라 빈 나무를 채운 뒤, 예시 답안과 점검 목록으로 확인합니다.
※ 입력한 내용은 저장되지 않습니다. 빈칸은 남겨도 됩니다.
예시 답안 보기 — 먼저 채운 뒤에 엽니다
한 문장: 반 학생 이름을 순서대로 하나씩 보여주고, 출석/결석 입력을 받아 기록한 뒤, 마지막에 출석 결과표를 보여준다.
- 1학생 명단을 불러온다
- 2명단에서 다음 이름을 화면에 보여준다
- 3출석/결석 입력을 받는다
- 4입력받은 결과를 기록한다
- 5명단이 끝날 때까지 2~4를 반복한다
- 6출석 결과표를 보여준다
예시와 표현이 달라도 괜찮습니다. 아래 점검 목록을 통과하는지가 기준입니다.
※ 입력한 내용은 저장되지 않습니다. 빈칸은 남겨도 됩니다.
예시 답안 보기 — 먼저 채운 뒤에 엽니다
한 문장: 학급 문고의 책을 등록해 두고, 누가 어떤 책을 빌리고 반납했는지 기록하며, 현재 상태를 조회할 수 있게 한다.
- 1책 등록 기능
- 1-1책 제목과 관리 번호를 입력받는다
- 1-2책 목록에 추가한다
- 2대출 기능
- 2-1빌리는 사람 이름과 책 번호를 입력받는다
- 2-2그 책이 대출 가능한지 확인한다
- 2-3대출 기록을 남기고 책 상태를 ‘대출 중’으로 바꾼다
- 3반납 기능
- 3-1반납할 책 번호를 입력받는다
- 3-2책 상태를 ‘대출 가능’으로 바꾸고 반납 날짜를 기록한다
- 4조회 기능
- 4-1전체 책 목록과 상태를 보여준다
- 4-2특정 사람이 빌린 책을 찾아 보여준다
기억해야 하는 정보: 책 목록(제목·관리 번호·상태), 대출 기록(누가·어떤 책을·언제 빌리고 반납했는지)
묶음을 가른 기준은 ‘사용자가 하려는 일’입니다. 기준이 하나로 통일되면 조각이 겹치기 어렵습니다.
※ 입력한 내용은 저장되지 않습니다. 빈칸은 남겨도 됩니다.
예시 답안 보기 — 먼저 채운 뒤에 엽니다
나누기 기준: 사용자가 하는 일의 순서(주운 물건을 올린다 → 잃어버린 사람이 찾는다 → 서로 연락해 돌려받는다)
- 1주운 물건 올리기 기능
- 1-1물건 정보 입력
- 1-1-1사진을 찍어 올린다사진 파일
- 1-1-2물건 종류·주운 장소·날짜를 고른다종류, 장소, 날짜
- 1-2올린 물건 목록 관리
- 1-2-1새 물건을 목록에 추가한다물건 목록
- 1-2-2주인을 찾은 물건을 ‘해결됨’으로 표시한다상태
- 2검색 기능
- 2-1조건으로 찾기
- 2-1-1종류·장소·날짜로 목록을 거른다검색 조건
- 2-1-2결과를 최신 것부터 보여준다늘어놓는 순서
- 3연락 기능
- 3-1쪽지 보내기
- 3-1-1물건을 올린 사람에게 쪽지를 남긴다쪽지 내용
- 3-1-2새 쪽지가 오면 알림을 보여준다알림 목록
기준을 ‘화면 단위’나 ‘정보 종류’로 잡아도 좋은 답이 됩니다. 다만 기준은 하나로 통일해야 어떤 기능이 어느 가지에 들어갈지 헷갈리지 않습니다.
한 문장 → 입력·처리·출력 → 조각 → 점검. 이 순서로 생각하는 것이 문제 분해입니다.
더 알아보기 — 함수와 모듈, 응집과 결합, 분할정복
1. 조각의 실제 이름 — 함수와 모듈
입력받는다함수
확인한다함수
바꾼다함수
조각 하나는 함수 하나가 됩니다. 예제의 ‘추측과 정답을 비교한다’는 compare(guess, answer) 같은 함수가 됩니다.
함수 여러 개가 모여 하나의 기능을 이루면 모듈(module)이라고 부릅니다. 문제 2의 대출·반납 묶음이 모듈입니다.
2. 좋은 분해의 전문 용어 — 응집과 결합
높은 응집(cohesion): 조각 하나는 한 가지 일만 한다.
낮은 결합(coupling): 조각 하나를 고쳐도 다른 조각을 고칠 필요가 없다.
심화 문제 점검 목록의 마지막 두 항목이 바로 이 두 기준입니다.
3. 나누기를 끝까지 밀어붙이면 — 분할정복
문제를 절반으로 나누고, 그 절반을 또 나누기를 되풀이하는 전략을 분할정복(divide and conquer)이라고 합니다.
정렬된 1,000쪽짜리 사전에서 한가운데를 펼쳐 절반을 버리기를 되풀이하면, 열 번 이내에 원하는 쪽에 도달합니다(이진탐색). 많은 정렬·탐색 알고리즘이 이 전략을 씁니다.
자가진단
답을 고르면 바로 채점과 해설이 나옵니다.
만든다
입력받는다
맞는지 확인한다
1 올린다
만든다
낸다
핵심 정리
조각 1개 = 함수 1개 · 막막한 조각은 한 번 더 나눕니다
이 장이 참고한 자료
- Hunsaker, E. (n.d.). Computational thinking. In The K-12 educational technology handbook. EdTech Books. https://edtechbooks.org/k12handbook/computational_thinking
- Jeong, G., Lash, T., & Israel, M. (2017). Helpful strategies for project planning during K-12 computer science instruction. Project TACTIC, Creative Technology Research Lab, University of Illinois. https://ctrl.education.illinois.edu/TACTICal/project-planning.html
- Liedahl, B. (2026, June 22). Teaching computational thinking without a computer. Edutopia. https://www.edutopia.org/article/teaching-computational-thinking-without-computer/