엔트리-시어핀스키삼각형그리기
엔트리 코딩시험에서 알고리즘의 가장 핵심적인 부분이 변수, 반복문, 조건, 함수이다.
함수로 시어핀스키 삼각형을 정의하고, 엔트리로 시어핀슼삼각형을 그려볼 것이다.
시어핀스키 삼각형(Sierpinski triangle)은 폴란드 수학자 바츨라프 시어핀스키의 이름을 딴 프랙탈 도형이다.
각 단계별로 생기는 정삼각형의 수를 살펴보면
0 단계에서 1개
1단계에서 3개
2단계에서 9개
3단게에서 27개의 정삼각형이 생긴다.
이를 일반화하면 n단계에서 생기는 정삼각형의 개수는3^n이다.
요구사항
* 시어핀스키 삼각형 함수를 정의한다.
- 3회 반복하기
. n>5보다 크면(n은 변의 길이)
- 시어핀스크(n/2). <- 재귀함수
- n만큼 움직이기
- 120도 회전하기
-> 시어핀스키 삼각형을 재귀함수를 활용하여 시어핀스키 삼각형을 그린다.
. 재귀함수란 함수 바디에서 자신의 함수를 호출한다.
. len 리스트를 분석해보면
. 6.25 변의 길이의 삼각형을 하나 그린다.
. 그리고 12.5만큼 이동한다.
-> 이를 3회 반복한다. (3개의 삼각형을 그린다.)
. 그리고 25만큼 이동한다.
. 6.25 변의 길이의 삼각형을 하나 그린다.
. 그리고 12.5만큼 이동한다.
-> 이를 3회 반복한다.(3개의 삼각형을 그린다.)
이런식으로 재귀 반복하며 삼각형을 그려나간다.
* 삼각형 변의 길이를 입력받는다.
분석 및 설계
. 변수만들기
- 길이 : 다각형 한 변의 길이를 저장한다.
. 초기화
. 펜 올리기
. 펜 색깔 검정색
. 모두 지우기
. len 리스트 항목 모두 지우기(디버깅 목적)
. 스프라이트 (-100,-1000) 위치로 이동하기
. 90도 보기
. 묻고 기다리기(변의 길이)
. 길이 변수에 '대답' 정하기
. 시어핀스키 삼각형 함수
. 펜내리기
. 3번 반복하기
. n > 5이면
- 시어핀스키(n/2)
- n만큼 움직이기
- 120도 회전하기
변의 길이가 30인 시어핀스키 삼각형을 그려보자.
* 총 3개의 삼각형을 그린다.
. 변의 길이가 7.5인 삼각형을 그린다.
. 15만큼 이동한다. (120도 회전)
. 변의 길이가 7.5인 삼각형을 그린다.
. 15만큼 이동한다.(120도 회전)
. 변의 길이가 7.5인 삼각형을 그린다.
. 15만큼 이동한다.
. 30만큼 이동한다. (120도 회전)
. 그리고 다시 3개의 삼각형을 그린다.(위의 방식 그대로)
. 30만큼 이동한다.(120도 회전)
. 그리고 다시 3개의 삼각형을 그린다.(위의 방식 그대로 삼각형을 그린다.)
블럭코딩
. 초기화 . 펜관련 초기화 : 펜 색깔, 모두 지우기 . 엔트리 위치 초기화 : (-100,-100) 위치로 이동하기, 90도 방향보기, 크기 10%로 정하기 . 길이 변수 묻고대답하기로 정한다. |
. 시어핀스키 함수 호출하기 |
. 시어핀스키(n) - 펜 내리기 - 3 반복하기 . n>5이상이면 - 시어핀스키(n/2) - n만큼 움직이기 - 120도 돌기 |
* 실행 결과물
변의 길이가 30인 시어핀스키 삼각형을 그려보았다.
변의 길이가 200인 시어핀스키 삼각형을 그려보았다.
시어핀스키 삼각형을 그리는 프로그램을 작성해보았다. 이번 프로그램에서는 재귀함수에 대해서 학습하였다.
좀 더 깊숙한 실행 화면은 추후에 설명을 별도로 재귀함수에 대해서 살펴보기로 하자.
이번에는 프랙탈 시어핀스키 삼각형을 그려보았다.
어려운 도형 같지만, 재귀함수를 활용하여 간단하게 프랙탈 도형을 그려보았다.
다시 한번 강조해서 말하지만, 변수의 값이 각 프로그램 단계별 순차적으로 어떻게 변화하는지 추척하는 것이 매우 중요하다. 블럭을 하나씩 쌓으면서 변수 볼륨 값의 변화를 살펴보자. 코딩은 눈으로 보면서 이해하고 학습하지만 직접 블럭을 쌓으며 이해하고 학습하는 것이 더 효과적이며 창의와 이해의 개념이 ~쑥 늘어납니다.
앞으로의 여러분의 모습을 기대합니다.
Just Do it!!!
Just Drag&Drop!!!
'엔트리메뉴 > 엔트리코딩시험-알고리즘' 카테고리의 다른 글
엔트리-코흐눈송이(Koch Snowflake) 그리기 (0) | 2022.08.30 |
---|---|
엔트리-시어핀스키다각형그리기 (0) | 2022.08.29 |
엔트리-다각형거미줄그리기 (0) | 2022.08.27 |
엔트리-육각형거미줄그리기 (0) | 2022.08.26 |
엔트리-오각형거미줄그리기 (0) | 2022.08.25 |
댓글