스크래치 COS -선형검색
스크래치COS 코딩시험에서 알고리즘의 가장 핵심적인 부분이 변수, 반복문, 조건, 함수이다.
코딩에서 가장 기본이 되는 알고리즘은 검색이다. 선형검색은 가장 기본이 되는 검색으로 리스트의 자료들을 순차적으로 검색해서 자료를 검색하는 알고리즘이다. 장점으로는 코드가 쉽고 이해하기 쉽지만, 단점으로는 자료를 검색하는 속도가 느리다.
요구사항
리스트에 10개의 숫자를 1~100 사이의 난수를 발생하여 삽입한다.
입력한 리스트의 숫자값들 중에서 검색하기 위해 숫자를 입력하고 해당 숫자를 검색한다.
분석 및 설계
. 변수만들기
- num : 10개의 숫자를 저장하는 리스트 변수이다.
- i : 리스트에 인덱스를 저장하는 변수이다.
- n : 키보드로부터 찾고자 하는 값을 입력받아 저장하는 변수이다.
. 스프라이트
. 고양이 스프라이트 : 실제 입력과 검색을 행하는 스프라이트
. 입력 버튼 스프라이트 : 고양이 스프라이트에 '입력' 메시지를 보내는 스프라이트이다.
. 찾기 버튼 스프라이트 : 고양이 스프라이트에 '찾기' 메시지를 보내는 스프라이트이다.
. 초기화
. 입력 신호를 받았을 때
. num 리시트 변수의 항목을 모두 삭제하기
. 10회 반복하며 1~100 사이의 난수를 num 리스트에 추가한다.
. 찾기
. 찾고자 하는 수를 키보드로부터 입력받아 n 변수에 저장한다.
. 10회 반복하며
. n과 num(i)항목 값이 같다면
"i번째에서 찾았습니다" 말하기
모두멈추기
. 아니면, i=i+1
블럭코딩
. 입력 신호를 받았을 때 . num 리시트 변수의 항목을 모두 삭제하기 . 10회 반복하며 1~100 사이의 난수를 num 리스트에 추가한다. |
찾기 신호를 받았을때 . 찾고자 하는 수를 키보드로부터 입력받아 n 변수에 저장한다. . 10회 반복하며 . n과 num(i)항목 값이 같다면 "i번째에서 찾았습니다" 말하기 모두멈추기 . 아니면, i=i+1 |
* 디버깅
* 입력버튼을 클릭했을 때
* 찾기 버튼 스프라이트를 클릭했을 때
. 키보드로부터 찾고자 하는 값을 입력받는다. 7을 입력한다. 그러면 n에 7값이 저정된다.
n=7
i=1
[1스텝]
if n = num(1) 항목 (7 = 23, false)
아니면
i =+1 (i=2)
[2스텝]
if n = num(2) 항목 (7 = 59, false)
아니면
i =+1 (i=3)
[3스텝]
if n = num(3) 항목 (7 = 56, false)
아니면
i =+1 (i=4)
[4스텝]
if n = num(4) 항목 (7 = 49, false)
아니면
i =+1 (i=5)
[5스텝]
if n = num(5) 항목 (7 = 39, false)
아니면
i =+1 (i=6)
[6스텝]
if n = num(6) 항목 (7 = 89, false)
아니면
i =+1 (i=7)
[7스텝]
if n = num(7) 항목 (7 = 7, true)
"7번째에서 찾았습니다." 말하기
멈추기(모두)
* 실행 결과물
'입력' 버튼 스프라이트를 클릭했을 때 num 리스트 변수에 10개의 난수값이 추가된다.
이진수 1010을 십진수로 변환한 결과는 십진수(10) 이다.
스크래치를 통해 선형검색 알고리즘을 구현해보았다. 프로그램 코딩 기법에서는 리스트의 i번째 항목을 가져오고 비교하여 같으면 찾는 간단한 알고리즘이다. 간단하지만, 매우 중요한 인덱스 개념을 활용하는 것이고, 인덱스 코딩 기법은 모든 프로그램의 기본이기 때문에 여러번 반복하면서 자기 것으로 습득할 것을 추천한다.
선형 검색 알고리즘은 특별한 알고리즘이 필요하지 않다. 리스트의 첫번째부터 순차적으로 항목을 비교한다.
다시 한번 강조해서 말하지만, 변수의 값이 각 프로그램 단계별 순차적으로 어떻게 변화하는지 추척하는 것이 매우 중요하다. 블럭을 하나씩 쌓으면서 변수 볼륨 값의 변화를 살펴보자. 코딩은 눈으로 보면서 이해하고 학습하지만 직접 블럭을 쌓으며 이해하고 학습하는 것이 더 효과적이며 창의와 이해의 개념이 ~쑥 늘어납니다.
앞으로의 여러분의 모습을 기대합니다.
Just Do it!!!
Just Drag&Drop!!!
'스크래치 > 스크래치 COS시험' 카테고리의 다른 글
스크래치COS-선택정렬 (0) | 2022.08.10 |
---|---|
스크래치COS-버블정렬 (0) | 2022.08.09 |
스크래치COS-십진수를이진수로변환 (0) | 2022.08.07 |
스크래치COS-이진수를십진수로변환 (0) | 2022.08.06 |
스크래치COS-피보나치수열 (0) | 2022.08.05 |
댓글