[신문과 놀자!/눈이 커지는 수학]소프트웨어 학습에 숨은 수학의 원리

  • 동아일보
  • 입력 2016년 4월 27일 03시 00분


코멘트
얼마 전 서영이는 앞으로 소프트웨어 교육을 강화해 초중학교에서 소프트웨어 교육을 의무화한다는 기사를 보았습니다. 방과후 학교에서 컴퓨터 프로그램을 배우고 있던 터라 반갑기도 했고 어떤 것들을 배울까 궁금하기도 했습니다.

서영: 엄마, 제가 방과후 학교 수업으로 스크래치 프로그램을 배우고 있잖아요. 이제는 과목으로 이런 프로그램을 배운다는 거죠?

엄마: 그래, 현재 정보기술(IT) 산업이 중요한 분야이고, 이 분야에 능력 있는 인재가 필요한 상황에서 교육도 중요해졌다는 증거겠지.

서영: 스크래치로 주로 그림을 그리고 대상을 움직이는 등의 명령을 실행시키는 것을 배웠어요. 어떤 친구는 여러 줄의 명령어를 사용했는데, 저는 몇 줄 이용하지 않고 명령을 실행 시킨 적이 있어요. 그때 뭔가 해낸 것 같고 재미있었어요.

엄마: 우리 서영이가 큰 경험을 했구나. 그럼 소프트웨어 뒤의 숨어 있는 수학에 대해 알아볼까?

○ 코드화의 기본, 수


수학을 이루는 것이 무엇인가 생각해보면 여러분은 어떤 대답을 할 수 있을까요? 수와 도형을 떠올리겠지요. 물론 이때 수는 수학에서 다루는 문자도 포함합니다. 그래서 수학은 수와 문자를 다루는 대수와 도형 또는 모양을 다루는 기하가 대표적인 영역입니다. ‘도형을 수로 만들 수 있다’는 주장을 어떻게 생각하시나요. 상상이 되나요?

세 점 A, B, C를 기호화된 대수의 형태인 {A}, {B}, {C}로 각각 나타낼 수 있다고 생각해봅시다. 일종의 도형을 수로 바꾸는 코드가 되는 것이지요. 또 선분 BC는 {B,C}로 나타내어 봅시다. <그림 1>

〈그림 1〉
〈그림 1〉
그러면 다음은 어떤 모양을 나타내는 것일까요?

{A}, {B}, {C}, {A,B}, {A,C}, {B,C}

그렇습니다. 이 도형은 삼각형입니다.<그림 2>

〈그림 2〉
〈그림 2〉
〈그림 3〉
〈그림 3〉
그러면 삼각형의 내부를 표현할 수 있는 방법은 없을까요? 점 세 개를 모아 {A,B,C}로 세 점이 이루는 면을 나타낸다면 다음과 같이 삼각형의 면까지 나타낼 수 있습니다. <그림 3>

{A}, {B}, {C}, {A,B}, {A,C}, {B,C}, {A,B,C}

이와 같이 도형을 문자를 이용해 대수로 표현할 수 있었습니다. 다르게 말하면 도형을 모두 코드화(기호로 표현)할 수 있었습니다. 입체도 마찬가지로 표현할 수 있습니다. 점 D를 추가해 위와 같은 방법으로 3차원에서의 사면체 또는 삼각뿔을 기호화할 수 있는 방법을 스스로 생각해 보세요. 좀 길어지기는 하지만 표현할 수 있을 것입니다.

○ 문제 해결의 방법, 알고리즘

소프트웨어를 다루는 데 있어 중요한 것 중 하나가 알고리즘입니다. 알고리즘은 어떤 문제를 해결하기 위한 동작들의 모임 정도로 생각할 수 있습니다. 예를 들어 로고(MSWLogo)라는 프리웨어(누구나 무료로 내려받아 사용할 수 있는 소프트웨어)가 있습니다. 로고는 명령에 따라 화면 위 삼각형 모양의 거북이가 흔적을 남기며 도형을 그리는 프로그램으로, 약 50년 전 교육용으로 개발됐습니다.(오늘날에도 다양한 버전으로 발전될 만큼 의미가 있습니다.)

사용하는 주요 명령어는 fd(앞으로 가기), bk(뒤로 가기), rt(오른쪽으로 돌기), lt(왼쪽으로 돌기) 정도이고, 여기에 움직일 거리(픽셀)나 각도(도) 만큼 수를 붙여 동작을 실행합니다.

예를 들어 길이 100의 선분을 그리고 싶다면

fd 100


〈그림 4〉
〈그림 4〉
이라는 명령을 실행하면 됩니다. <그림 4>

이제 한 변의 길이가 100인 정사각형을 그리는 경우를 머릿속으로 생각해 봅시다. 어떤 명령어를 실행시키면 될까요? 정사각형의 성질을 생각해보면

fd 100 rt 90 fd 100 rt 90 fd 100 rt 90 fd 100 rt 90


이라는 명령을 실행하면 될 것입니다. <그림 5>

〈그림 5〉
〈그림 5〉
그런데 이 명령에서 무엇인가 발견되는 것이 없는지요. 사각형의 모양을 만들기 위해 반복되고 있는 명령이 ‘fd 100 rt 90’이라는 것이지요. 반복되는 실행을 줄일 수 방법은 없는 것일까요? 그래서 반복을 의미하는 명령어 ‘repeat’을 하나 더 소개합니다. 위의 긴 명령들의 모임을 다음과 같이 간단히 할 수 있습니다.

repeat 4 [fd 100 rt 90]


여기서 4는 사각형이므로 네 번 반복하는 것을 뜻합니다.

그럼 이번에는 한 변의 길이가 100인 정삼각형을 반복 명령어를 이용해 그릴 수 있는 방법을 생각해 봅시다. 오른쪽으로 몇 도 돌아야 할까요? 정삼각형의 한 내각의 크기가 60도이므로 오히려 120도를 돌아야 하겠지요. 그래서 다음과 같은 명령을 실행하면 정삼각형이 그려집니다.

repeat 3 [fd 100 rt 120]

이제 여기서 생각을 넓혀봅시다. 그럼 한 변의 길이가 100인 정오각형, 정육각형, 정칠각형 등을 그리는 일반적인 방법은 무엇일까요? 여기서 중요한 생각은 변의 개수를 대표하는 n각형에 따라 각을 결정해야 하는 것입니다. 정n각형의 한 내각이 360도÷n이므로 오른쪽으로 돌때는 180도-(360÷n)이 되어야 합니다.

따라서 한 변의 길이가 100인 정n각형을 그리는 명령은 다음과 같습니다.

repeat n [fd 100 rt 180-(360/n)]

이제 어떠한 정다각형도 이 알고리즘을 이용하면 그릴 수 있게 되는 것이지요.

프로그래밍 언어 문법을 외우고, 응용프로그램 인터페이스를 외우는 데 시간을 보내기보다는 문제를 해결하기 위한 논리적 사고력을 키우고, 알고리즘을 세우는 힘을 키우는 수학적 관점에서 접근하면 이 또한 흥미롭고 도전적인 공부가 아닐까요?
 
박지현 반포고 교사
#코드화#수학#알고리즘
  • 좋아요
    0
  • 슬퍼요
    0
  • 화나요
    0
  • 추천해요

댓글 0

지금 뜨는 뉴스