대메뉴 바로가기 본문 바로가기

데이터 기술 자료

데이터 기술 자료 상세보기
제목 스크래치 프로그래밍 맛보기 : 피보나치 사자의 수수께끼
등록일 조회수 5090
첨부파일  

스크래치 프로그래밍 맛보기

피보나치 사자의 수수께끼



스크래치는 MIT 대학교에서 2007년에 만든 교육용 프로그래밍 언어다. 다른 프로그래밍 언어와 달리 마치 레고 블록을 쌓듯 프로그램을 만들 수 있어 배우기 쉽다. 스크래치 홈페이지(scratch.mit.edu)에서 직접 프로그램을 만들 수 있고, 오프라인 버전을 다운로드 받아 사용할 수도 있다.



게임 소개

‘피보나치 사자의 수수께끼’ 프로그램은 사자가 내는 문제를 피보나치 수열을 사용해서 푸는 게임이다. 성문 앞에는 사자 한 마리가 버티고 있는데, 이 문을 통과하기 위해서는 사자가 내는 수수께끼를 맞혀야 한다. 이 사자는 피보나치 수열 방식으로 토끼를 잡아 먹는데 금, 토, 일요일 중에 하루를 선택해 그 날 잡아먹은 토끼의 수를 수수께끼로 낸다. 성문을 통과하기 위해서는 월요일과 화요일에 사자가 먹은 토끼의 수를 정확히 알아맞혀야 한다. 만약 못 맞히게 되면 사자에게 잡아 먹힌다.



예를 들어 <그림 1>과 같이 사자가 토요일에 토끼 55마리를 먹었다고 말한다면, 월요일에는 10마리, 화요일에는 5마리를 먹어야 토요일에 55마리를 먹게 된다(수요일: 10 + 5 = 15마리, 목요일: 5 + 15 = 20마리, 금요일: 15 + 20 = 35마리, 토요일: 20 + 35 = 55마리). 따라서 10과 5를 차례대로 입력하면 사자에게 잡아 먹히지 않고 성문을 통과할 수 있다.



요일 정하기

우선 수수께끼의 요일을 정하기 위해서 5~7 사이의 난수를 발생해 5이면 금요일, 6이면 토요일, 7이면 일요일로 정한다. [만약 ~라면] 블록을 사용해도 되지만 미리 ‘요일’ 리스트를 만들어 5, 6, 7에 해당하는 요일을 적어 놓으면 조금 더 쉽고 간단하게 만들 수 있다.





수수께끼 만들기

먼저 ‘수열’ 리스트를 만들고 여기에 피보나치 수열 방식으로 계산해 넣는다. 수수께끼를 만들기 위해서는 처음 두 수가 필요한데, 이것은 [1부터 10사이의 난수] 블록을 사용해서 만들 수 있다. 처음 두 수가 정해지면 사흘째부터는 전날과 전전 날 먹은 토끼 수를 더하면 된다. 만들어진 ‘수열’ 리스트의 맨 마지막 수가 수수께끼에 나오는 토끼 수이기 때문에 이 값은 ‘몇마리’라는 변수를 만들어 따로 저장해 놓는다.





수수께끼 말하기

사자의 말에는 항상 나오는 말과 변수의 값이 섞여 있으므로 이들을 [~ ~ 결합하기] 블록을 사용해서 합쳐주면 된다. 사자의 말이 길기 때문에 세 부분으로 나누어 만들었다.





수수께끼 대답하기



사자가 수수께끼를 낸 후에는 사용자의 입력을 받기 위해 [~ 묻고 기다리기] 블록을 사용한다. 이 부분은 ‘Gobo’ 스프라이트 안에서 만들어야 사자가 묻고 Gobo가 대답하는 것처럼 보인다. 먼저 [월요일에 잡아먹은 토끼는 묻고 기다리기] 블록이 실행되면 화면에 입력상자가 나타나 사용자의 입력을 기다린다. 사용자가 수를 입력하고 ‘Enter’ 키를 누르면 자동으로 ‘대답’이라는 변수에 입력한 값이 저장된다. ‘토끼’ 리스트를 만들어 ‘대답’으로 들어온 값을 첫 번째 항목에 저장한다. 화요일도 같은 방법으로 만드는데, 여기서 받은 대답은 ‘토끼’ 리스트의 두 번째 항목에 저장한다.



대답 계산하기

<그림 5>에서 ‘토끼’ 리스트에 월요일과 화요일에 잡아먹은 토끼 수가 저장되었기 때문에, <그림 3>의 ‘수열’ 리스트를 계산할 때와 같은 방법으로 ‘토끼’ 리스트의 값도 피보나치 수열을 계산해 넣는다. 만약 ‘토끼’ 리스트의 마지막 값이 ‘몇마리’ 변수(‘수열’ 리스트의 마지막 값)와 같다면 정답을 맞힌 것이기 때문에 성 안에 들어갈 수 있다. 하지만 답이 틀렸다면 사자가 잡아먹게 된다.





‘대답 계산하기’ 기능이 필요한 이유

<그림 6>과 같이 만들지 않고 ‘수열’ 리스트의 첫 번째, 두 번째 수와 사용자가 입력한 값을 단순히 비교하면 더 간단하게 만들 수 있을 것 같기도 하다. 하지만 이 수수께끼 문제에는 여러 개의 답이 나올 수 있기 때문에 단순히 비교하는 방법으로는 올바른 정답을 틀렸다고 판단할 수 있다. 예를 들면, 사자가 “일요일에 토끼 85마리를 잡아먹었다”라고 문제를 냈다면, 이에 대한 대답은 월요일 1마리, 화요일 10마리가 될 수 있고, 월요일 9마리, 화요일 5마리도 될 수 있다. 그렇기 때문에 조금 복잡해도 <그림 6>과 같이 사용자가 입력한 값을 한 번 더 계산해서 각 리스트의 마지막 값을 비교해야 정답이었는지 제대로 확인할 수 있다.

피보나치 사자의 수수께끼 프로그램은 ‘scratch.mit.edu/projects/12982753/’에서 실행해 볼 수 있고 프로그램 소스코드도 볼 수 있다. 여기에서 설명하지는 않았지만 도움말 기능을 포함해 여러 가지 기능이 추가돼 있다.



출처 : 마이크로소프트웨어 4월호

제공 : 데이터전문가 지식포털 DBguide.net