학습자료 › 컴퓨팅 사고력 워크북 › 02 패턴 인식과 일반화

패턴 인식과 일반화 — 같은 뼈대를 찾아 변수로

소재가 다른 프로그램도 같은 뼈대를 찾으면, 달라지는 부분만 빈칸(변수)으로 바꿔 틀 하나로 다시 쓸 수 있습니다.

1개념 정리

패턴 인식pattern recognition여러 프로그램에서 되풀이되는 공통 뼈대 찾기
일반화generalization달라지는 부분만 빈칸(변수)으로 바꿔 틀 하나로 만들기
숫자 맞히기
추측 입력→정답과 비교→힌트↻ 맞힐 때까지
가위바위보
손 입력→손끼리 비교→이번 판 결과↻ 2번 이길 때까지
하는 일의 순서가 같습니다 — 같은 뼈대 찾기 = 패턴 인식
↓ 달라지는 곳만 빈칸으로
틀
[입력] 받기→[비교 규칙]으로 비교→[결과] 보여주기↻ [끝 조건]까지
빈칸 있는 틀 만들기 = 일반화
틀을 만들면값만 바꿔여러 프로그램에다시 쓸 수 있습니다

잘 찾았는지 세 가지로 점검합니다

✗ 나쁜 예
✓ 좋은 예
1겉이 아니라 하는 일로조각이 하는 일의 순서가 같습니까?
✗ 나쁜 예
7카드 게임=7카드 앨범
둘 다 카드가 나온다고 묶음
✓ 좋은 예
입력→비교↻
=
입력→비교↻
두 게임 모두 입력 → 비교 → 반복
2변하는 것과 안 변하는 것 가르기줄마다 같은지 다른지 가렸습니까?
✗ 나쁜 예
입력비교반복추측 숫자손 모양
“두 게임은 다 똑같다”
✓ 좋은 예
그대로입력비교반복
바뀜추측 숫자 ↔ 손 모양
3변하는 것만 변수로빈칸에 값을 넣으면 원래 프로그램이 됩니까?
✗ 나쁜 예
?→?→?
흐름까지 빈칸 — 뜻이 사라짐
✓ 좋은 예
[입력] 받기→[비교 규칙]으로 비교↻
달라지는 값만 빈칸

빈칸에 값을 채웠을 때 원래 프로그램들이 빠짐없이 되살아나면 성공입니다.


2예제 풀이 — 두 게임의 공통 뼈대 찾기

01장에서 나눈 두 게임을 나란히 놓고, 공통 뼈대를 찾아 틀 하나로 만듭니다.

1두 조각 나무를 나란히 놓습니다

01장에서 나눈 두 나무를 번호와 색으로만 나란히 놓았습니다.

2하는 일이 같은 조각끼리 짝짓습니다
숫자 맞히기공통 역할가위바위보
1정답을 무작위(랜덤)로 정한다
시작에 한 번
비교할 값 정하기
2컴퓨터 손을 무작위로 정한다
매 판
2추측 숫자를 입력받는다
입력 받기
1손 모양을 입력받는다
4추측과 정답을 비교한다
비교해 가려내기
3누가 이겼는지 가린다
3시도 횟수를 1 늘린다
횟수 세기
4이긴 횟수를 기록한다
5힌트를 보여준다
결과 보여주기
5결과와 이긴 횟수를 보여준다
6맞힐 때까지 반복한다
끝 조건까지 반복
6한쪽이 2번 이길 때까지 반복한다
7축하와 시도 횟수를 보여준다
최종 결과 보여주기
7마지막 승자를 보여준다

순서가 조금 달라도(숫자 맞히기 3·4번, 가위바위보 1·2번) 하는 일이 같으면 짝입니다. 값을 정하는 때는 다릅니다.

3공통 뼈대를 뽑아냅니다
공통 뼈대
1비교할 값을
정한다
2입력을
받는다
3입력과 값을
비교한다
4횟수를
센다
5결과를
보여준다
↻ 6 끝 조건이 될 때까지 2~5를 반복한다
7최종 결과를
보여준다

1번을 언제 하는지만 빼면 두 게임에 공통인 흐름입니다

4달라지는 부분을 빈칸(변수)으로 바꿉니다
일반화한 틀
1[정하는 때]에
[비교 대상]을 정한다
2[입력]을
받는다
3[입력]과 [비교 대상]을
[비교 규칙]으로 비교한다
4[셀 것]을
센다
5[결과]를
보여준다
↻ 6 [끝 조건]이 될 때까지 2~5를 반복한다
7[최종 결과]를
보여준다
빈칸숫자 맞히기가위바위보 [정하는 때]시작에 한 번매 판 [비교 대상]1~100 정답컴퓨터 손 [입력]추측 숫자손 모양 [비교 규칙]크다·작다·같다가위바위보 이김 규칙 [셀 것]시도 횟수이긴 횟수 [결과]더 큽니다·더 작습니다 힌트이번 판 결과와 이긴 횟수 [끝 조건]정답을 맞힘한쪽이 2번 이김 [최종 결과]축하와 시도 횟수마지막 승자
  • ✓ 되살아남빈칸에 각 열의 값을 넣으면 두 게임이 그대로 됩니다.

[정하는 때]까지 빈칸으로 두어서, 한 번 정하는 게임과 매 판 정하는 게임이 틀 하나에 담깁니다.


3따라 하기 — 하이로우 카드 게임에 틀 적용

다음 카드가 지금 카드보다 높을지 낮을지 맞히는 게임입니다. 틀리면 끝나고, 이어 간 장수가 점수입니다.

물음 1 · 틀의 [입력] 찾기이 게임에서 틀의 [입력]에 들어갈 것은 무엇입니까?
물음 2 · 같은 뼈대 찾기이 틀로 만들 수 있는 프로그램 4개를 골라 빈칸을 채웁니다.
같은 뼈대: 입력 → 비교 → 반복
빈칸
빈칸
빈칸
빈칸
마무리 · 하이로우로 빈칸 채우기하이로우 값을 틀의 빈칸에 채운 모습입니다.
빈칸하이로우 [정하는 때]매 판 [비교 대상]컴퓨터가 뒤집을 다음 카드 [입력]다음 카드가 높을지 낮을지 예측 [비교 규칙]다음 카드가 예측대로 높은지 낮은지 가려냄 [셀 것]이어 간 장수 [결과]맞았는지 틀렸는지 [끝 조건]예측이 틀림 (또는 카드가 다 떨어짐) [최종 결과]이어 간 장수
✓ 되살아남

하이로우는 카드를 매 판 뒤집어 가위바위보와 같은 갈래입니다. 틀 하나로 세 게임이 모두 표현됩니다.


4스스로 풀기

난이도를 골라 빈칸을 채운 뒤, 예시 답안과 점검 목록으로 확인합니다.

문제 1 — 두 게임의 공통 뼈대 찾기
두 게임의 공통 뼈대를 틀로 쓰고, 달라지는 부분을 [빈칸]으로 표시합니다.

둘 다 맞으면 점수를 주고, 사칙연산은 10문제, 낱말 퀴즈는 낱말 목록 끝까지 되풀이합니다.

1공통 뼈대 나무 하는 일이 같은 조각끼리 짝지으며
2빈칸 표 두 게임에서 달라지는 부분

※ 입력한 내용은 저장되지 않습니다. 빈칸은 남겨도 됩니다.

예시 답안 보기 — 먼저 채운 뒤에 엽니다
공통 뼈대(틀)
  1. 1[문제]를 낸다
  2. 2답을 입력받는다
  3. 3[정답]과 비교해 맞는지 가려낸다
  4. 4맞으면 점수를 1 올린다
  5. 5결과를 보여준다
  6. 6문제 목록 끝까지 1~5를 반복한다
  7. 7최종 점수를 보여준다
빈칸사칙연산 대결낱말 뜻 퀴즈 [문제]사칙연산 식낱말과 뜻 [정답]계산 결과올바른 뜻

답 입력받기·채점·점수·반복은 두 게임이 똑같으므로 틀에 그대로 둡니다. 이 부분까지 빈칸으로 빼면 뜻이 사라집니다.

스스로 점검
문제 2 — 게임이 아닌 프로그램에도 통하는가
두 관리 프로그램의 공통 뼈대를 빈칸 있는 틀로 만들고, 세 번째 프로그램 ‘좋아하는 과목 설문 받기’에 적용합니다.

둘 다 반 명단의 이름을 하나씩 보여 주고 답을 입력받아 기록합니다.

1공통 뼈대 나무 반복 안 조각은 ‘+ 안쪽 조각’으로
2빈칸 이름 프로그램마다 달라지는 부분
3‘설문 받기’에 값 채우기

※ 입력한 내용은 저장되지 않습니다. 빈칸은 남겨도 됩니다.

예시 답안 보기 — 먼저 채운 뒤에 엽니다
공통 뼈대(틀)
  1. 1명단을 불러온다
  2. 2명단 끝까지 다음을 반복한다
    1. 2-1다음 이름을 보여준다
    2. 2-2그 사람에게 [질문]의 답을 입력받는다
    3. 2-3답을 기록한다
  3. 3결과표를 보여준다

빈칸: [질문] [답의 종류] [결과표 형식]

빈칸설문 받기 [질문]좋아하는 과목 [답의 종류]과목 이름

나머지 흐름은 그대로이고 값만 바꿔 끼우면 됩니다. 이 뼈대는 게임과 다른 ‘명단 훑기’ 종류지만, 공통 뼈대를 찾아 빈칸으로 빼는 기술은 똑같이 통합니다.

스스로 점검
문제 3 — 억지로 하나로 묶으면
누군가 “둘 다 반복이 있으니 아래 두 뼈대를 하나의 틀로 합치자”고 합니다. 합쳐도 되는지 따져 봅니다.
하이로우
예측 입력→다음 카드와 비교→결과↻ 틀릴 때까지
출석 부르기
다음 이름→출석 입력→기록↻ 명단 끝까지
1두 반복이 끝나는 기준
2억지로 합치면 생기는 문제
3두 패턴의 이름
4빈칸으로 뺄 수 있는 것 / 없는 것

※ 입력한 내용은 저장되지 않습니다. 빈칸은 남겨도 됩니다.

예시 답안 보기 — 먼저 채운 뒤에 엽니다
하이로우출석 부르기 끝나는 기준[끝 조건] 예측이 틀림 · 비교가 중심명단의 끝 · 기록이 중심 패턴 이름‘비교 반복형’‘목록 훑기형’

억지로 합치면: ‘언제 끝나는가’가 두 갈래로 뭉개져 빈칸이 늘고 더 헷갈립니다. 한 틀이 두 가지를 다 담으려다 어느 쪽도 깔끔히 되살리지 못합니다.

뺄 수 있는 것입력 종류 · 비교 대상 · 끝 조건의 구체적 내용 뺄 수 없는 것흐름(반복·비교·기록의 순서) — 그 순서가 곧 패턴의 정체입니다
스스로 점검
돌아보기 — 채점하지 않습니다. 공책에 짧게 답합니다.
1가장 막힌 곳은 어디였고, 무엇을 바꿔서 풀었습니까?
2세 문제에서 공통으로 쓴 방법은 무엇입니까?
3새 프로그램을 만나면 패턴을 찾으려고 무엇부터 하겠습니까?

공통 뼈대 찾기 → 달라지는 것만 빈칸으로. 이 사고가 패턴 인식과 일반화입니다.

더 알아보기 — 매개변수, 중복 제거(DRY), 디자인 패턴

1. 빈칸의 실제 이름 — 매개변수와 인자

playGuessGame(비교대상, 비교규칙, 끝조건)
넣는 값(인자):1~100 정답크다·작다·같다정답을 맞힘

틀의 빈칸 [ ]은 함수의 매개변수(parameter)가 됩니다.

함수를 부를 때 빈칸에 넣는 실제 값을 인자(argument)라고 부릅니다.

2. 같은 코드를 두 번 쓰지 않기 — DRY 원칙

✗숫자 맞히기용 뼈대가위바위보용 뼈대같은 뼈대를 두 번
✓틀 하나+숫자 맞히기 값가위바위보 값

같은 뼈대를 게임마다 새로 만들면, 한 곳을 고칠 때 여러 곳을 함께 고쳐야 합니다.

그래서 DRY 원칙(Don't Repeat Yourself — 반복하지 마라)이 있습니다. 겹치는 부분을 틀(함수) 하나로 모으는 중복 제거의 첫 단계가 패턴 인식과 일반화입니다.

3. 되풀이되는 좋은 구조의 이름 — 디자인 패턴

자주 나타나는 좋은 구조에 이름을 붙여 모아 둔 것을 디자인 패턴(design pattern)이라고 합니다.

심화 문제에서 ‘비교 반복형’과 ‘목록 훑기형’에 이름을 붙인 것이 패턴에 이름을 주는 연습입니다.


자가진단

답을 고르면 바로 채점과 해설이 나옵니다.

Q1 · 개념여러 프로그램에서 공통 뼈대를 찾아 틀로 만드는 까닭으로 가장 알맞은 것은 무엇입니까?
Q2 · 적용‘숫자 맞히기’와 ‘가위바위보’의 공통 뼈대에서, 두 게임이 서로 달라서 빈칸(변수)으로 빼야 하는 부분은 무엇입니까?
숫자 맞히기
추측 입력→정답과 비교→힌트↻
가위바위보
손 입력→손끼리 비교→이번 판 결과↻
Q3 · 판단다음 중 겉모습이 아니라 하는 일로 올바르게 패턴을 묶은 것은 무엇입니까?
Q4 · 구분여러 ‘○○ 퀴즈’ 프로그램을 틀 하나로 일반화할 때, 빈칸(변수)으로 빼기에 가장 알맞은 것은 무엇입니까?
○○ 퀴즈
문제 내기→답 입력→채점↻

핵심 정리

같은 뼈대를 찾아 변수로 일반화한다
1나란히 놓기
2하는 일로 짝짓기
3공통 뼈대 뽑기
4달라지는 것만 빈칸으로
겉이 아니라 하는 일로변하는 것 가르기변하는 것만 변수로

빈칸에 값을 넣으면 원래 프로그램이 되살아나야 합니다

이 장이 참고한 자료