2025년, 코딩은 선택이 아닌 필수!

2025년 모든 학교에서 코딩이 시작 됩니다. 먼저 준비하는 사람만이 기술을 선도해 갑니다~

강의자료 342

오토마타란

컴퓨터 과학을 만나다 보면 종종 오토마타라는 단어를 종종 접하게 되는데요. 오늘은 오토마타가 무엇인지 알아 보려고 합니다. 오토마타란 오토머튼(automaton)의 복수형으로, 사람이 지속적으로 조정하지 않아도 스스로 움직이는 자동 로봇을 뜻하는 말로 쓰이고 있습니다. 위키백과에 따르면 "오토마타는 적어도 유한한 상태를 갖고, 입력을 받아 입력에 따라 일정하게 상태를 전이하며, 출력을 내놓는다" 라고 정의하고 있습니다. 컴퓨터 과학의 문제를 풀다 보면 위와 비슷한 그림을 종종 보게 되는데요. 위의 문제는 결정적 유한 오토마타의 예이며 S1, S2는 상태이고, 1과 0은 기계가 입력으로 받아들이는 문자이다. 이 기계는 1과 0으로 이루어진 모든 가능한 문자열 중 0이 짝수 개인 것을 인지하고, 그렇지 않은..

프렉탈이란?

정보과목을 접하다 보면 프렉탈이란 용어를 자주 접하게 됩니다. 프로그래밍을 하는 학생들에게는 재귀함수라는 말이 오히려 이해 하기 더 쉬울것 같은데요. 바로 작은 구조를 이용해서 큰 구조를 만들어 가는 것을 프랙탈이라고 합니다. 예를 들어 칸토어 먼지는 사각형 하나를 기준으로 사각형 4개가 사각형이 되는 구조를 가지고 있고 다시 또 그 4각형 4개가 다시 사각형을 만드는 구조를 지니고 있습니다. 그렇다면 이러한 프랙탈의 창시자는 누구일까요? 프랙탈 이론은 1960년대 프랑스 수학자 B.B. 만델브로트 박사에 의해 창안되었다고 해요. 만델브로트 박사는 울퉁불퉁한 바위로 이루어진 해안선의 길이가 궁금해져서 바위를 단계적으로 확대해서 들여다 보았는데 마치 나뭇가지처럼 비슷한 모양이 계속 반복되는 사실을 발견했습..

공부 잘하는 방법

하드 정리하다가 공부잘하는 방법이라는 문서가 보이네요.^^ 어느분이 작성해 놓았던 자료를 제가 다운받아 가지고 있던 자료네요. 지금 다시 읽어 봐도 맞는 말만 적혀 있는 것 같아요. 자신이 똑똑하다고 생각해서 혹시 놀고 있는 사람은 없나요? 똑똑하다는 것은 자신의 자만일 수도 있어요. 성실함이 아무리 똑똑한 머리도 치고 올라 갈 수 있음을 매 순간 느끼고 있는 한 사람으로... 공부 잘하는 방법이... 남들 놀때 더 열심히 노력하는 것 만큼 중요한 것은 없다는 것을 느끼고 있습니다. 물론 뛰어난 머리를 가지고 태어난 학생이라면 그렇지 않은 학생보다 유리한 출발점에서 시작할 수는 있겠지만... 요즘에서야 거북이와 토끼의 우화가 괜히 나오는 것은 아니라는 것을 새삼 깨닫고 있네요. 또한 작은 목표를 세우고 ..

[알고리즘]그리디(greedy) 알고리즘

그리디(greedy) 알고리즘이란? 단어에서 나타내듯이 아주 탐욕스러운 알고리즘 입니다. 이렇게 탐욕스럽다라고 표현 하니 학생들은 아주 나쁜 알고리즘이네요? 라고 말하네요. 하지만 탐욕스러운 것이 정말 나쁜 것일까요? 자신이 항상 손해 보면서 사는 사람은 없을 것입니다. 사람 사는 세상에 주고 받고 하면서 자신이 더 큰 이득을 보기 위해 조금 더 작은 것을 내 주는 것일 뿐입니다. 이와 마찬가지로 그리디 알고리즘은 현재 선택해야 되는 시점에서 자신에게 가장 이득이 되는 것을 취하고 나머지는 버리는 경우를 그리디 알고리즘이라고 합니다. 이러한 알고리즘의 예로 가장 많이 사용 되는 것이 동전 바꿔 주는 문제인데요. 500원,100원,50원,10원,5원,1원 단위의 동전이 있을때 문방구에 가서 1432원짜리 ..

Code Block 디버그 오류(For MinGW compilers, it's 'gdb.exe')

저희 원의 학생이 집에서 코드 블럭 설치 후에 디버깅을 하는데 디버깅이 안된다고 해서 처리방법에 대해 설명 드립니다. 학생의 컴퓨터에서 디버깅을 실행하면 아래 그림과 같이 디버깅 설정이 잘못 되어 있다고 나오는데요. 당황하지 마시고 메뉴에서 Settings->debugger 을 선택 합니다. 다음과 같이 설정화면이 뜨면 Default 를 선택해 줍니다. Executable path 에 빨간색으로 되어 있는데 Path가 지정되어 있지 않거나 Path가 제대로 안 잡혀 있는 경우입니다. 따라서 옆에 ... 버튼을 클릭하여 해당 path를 잡아 주면 되는데요. 일반적으로 CodeBlock 설치 위치가 C:\Program Files (x86)\CodeBlocks\MinGW\bin 에 설치가 됩니다. C:\Pro..

행렬의 곱을 이용한 피보나치 수열 구하기

피보나치 수열은 죽지 않는 토끼에서 유래 되었는데요. 처음 태어난 토끼 한쌍은 한달이면 다 자라고 그 다음달 부터는 매달 한쌍의 새끼를 낳았을때 1년 후 혹은 2년 후에 몇쌍이 되어 있는지 궁금해서 묻는 문제에서 유래 되었는데요. 이러한 토끼가 살아 있는 쌍을 구하는 공식을 테이블을 이용해 그려 보면 다음과 같이 그려 볼 수가 있습니다. 새끼를 낳을수 있는 토끼를 성체라고 보면 다음과 같이 됩니다. 기간 1월 2월 3월 4월 5월 6월 7월 8월 9월 태어난쌍 1 0 1 1 2 3 5 8 13 성체 0 0 1 1 2 3 5 8 13 살아있는쌍 1 1 2 3 5 8 13 21 34 성체를 계산 하는 방법은 전월의 성체의 수에 전전월에 태어난 토끼의 수를 더해 주면 됩니다. 가령 3월의 성체 수는 2월의 성..

행렬식의 기하학적 의미 - 벡터가 이루고 있는 평행사변형의 넓이

이산 수학을 공부하다 보면 행렬에 관한 문제를 풀게 되는데요. 행렬을 배우다 보면 행렬식을 배우게 됩니다. 영어로는 determinant 라고 하면서 계산 하는 방법은 다음과 같습니다. A 행렬이 다음과 같이 구성 되어 있을때 행렬식 det(A) = a11 * a22 - a12 * a21 과 같이 계산이 됩니다. 그렇다면 이러한 행렬식이 의미하는 것은 무엇일까요? 알고리즘에서 기하문제가 종종 나오는데... 기하 문제에서 사용하는 사각형의 부피를 구할때 이 행렬식을 이용하기도 합니다. 오늘은 이 두개의 벡터가 이루고 있는 평행사변형의 넓이에 대해 알아 볼까 합니다. 위와 같은 벡터가 두개가 있는 경우 행렬식은 이 벡터를 선형 변환 후 두 기저벡터가 이루고 있는 평행사변형의 넓이를 의미합니다. 이것을 벡터의..

[컴퓨팅 사고력]2의 보수 3의 보수는 무엇일까?

엊그제 학생들에게 2의 보수를 설명을 해 주면서 10의 보수의 개념에 대해 먼저 설명을 해주었답니다. 보수란 보충하는 수의 개념으로 8의 10의 보수는 10을 만들기 위한 2이고 8의 9의 보수는 9를 만들기 위해서 보충하는 1의 수라고 말해 주었답니다. 그리고 나서 2의 보수는 1의 보수에 1을 더한 값이라는 개념에 대해 설명을 해 주었습니다. 왜냐하면 2의 보수가 되려면 1과 2차이가 1이 차이가 나기 때문에 1을 더해 주어야 하기 때문이죠... 그러면서 88의 10의 보수는 100을 만들기 위한 12인데 이것을 100 - 88 = 12 라고 계산 하는 것 보다 9의 보수 개념으로 각각의 자리에서 9-8 = 1, 9 - 8 = 1 이기 때문에 11 + 1 = 12 가 되는 방법에 대해 설명을 해 주면..

CodeBlock 환경설정 초기화 방법

코드블럭을 사용하다 보면 실수로 환경설정이 바뀌는 일이 발생하는 경우가 종종 있습니다. 예를 들면 다음과 같이 로그창이 보여 주는 것이 정상인데 실수로 드래그 해서 아래로 내리는 경우 다시 위로 끌어 올릴려고 할때 끌어 올릴 수가 없는 경우 프로그램을 삭제했다가 다시 재 설치해도 보이지 않고 Logs 를 선택해도 보이지 않는 경우 코드블럭을 처음 설치 하는 것과 동일한 환경을 만들고 싶은 경우 다음과 같이 수행하면 됩니다. 1. CodeBlock 를 종료 후 2. C:\Users\사용자계정\AppData\Roaming\CodeBlocks 디렉토리에 들어 갑니다.(여기서 사용자계정은 윈도우 로그인 계정입니다. 또한 사용자 계정에 들어 갔을때 AppData 가 보이지 않을 수 있는데 여기서 그냥 강제로 입력..

[컴퓨팅 사고력]하노이탑 문제(Hanoi Tower Problem) 이해하기

하노이탑 문제는 이산수학이나 프로그래밍의 재귀 함수에서 자주 나오는 유형의 문제입니다. 오늘은 하노이탑의 원리에 대해 알아 보도록 하겠습니다. 하노이탑이 유래된 것은 인도 베나레스에 있는 한 사원에 세상의 중심을 나타내는 큰 돔이 있고 그 안에 세개의 다이아몬드 바늘이 동판 위에 세워져 있습니다. 이 바늘 가운데 하나에는 신이 64개의 순금 원판을 끼워 놓았습니다. 가장 큰 원판이 바닥에 놓여 있고, 나머지 원판들이 점점 작아지며 꼭대기 까지 쌓아 있습니다. 이것이 신성한 브라흐마의 탑입니다. 브라흐마의 지시에 따라 승려들은 모든 원판을 다른 바늘로 옮기기 위해 밤낮 없이 차례로 제단에 올라 규칙에 따라 원판을 하나씩 옮기는데요. 해당 규칙은 다음과 같습니다. 1. 한번에 하나의 원판만 옮길수 있다. 2..