목차 인공지능 공부의 시작 어제 다시 학교에 왔다. 부모님의 차를 타고, 고속도로를 타서, 먼길을 달려왔다. 낮이라서, 코로나 때문에 사람들이 많이 안다닌다고 생각하지만, 오는길에 차가 막혔던 적이 한번도 없었다. 곰곰히 생각해보니 참 신기한거다. 어떻게 이많은 도로들을 연결하고, 건설했을까 어떤 기준으로? 언제 분기하는지 이런것들 말이다. 새로운 도로를 건설하는건 엄청난 비용과 시간이 들어가는 일인데, 하나하나를 신중하게 결정해야하는데, 판단 기준이 뭘까.. 라고 그래서 난 내 나름대로 Ai를 사용하면 그 판단을 내릴 수 있지 않을까 생각했다. 내가 아는 Ai는 인간이 풀기 힘들만한 여러가지 데이터들을 모아서 최상의 결과를 내어주는 그런 기술로 알고있다. 그렇다면, 지금 존재하는 모든 교통정보들을 모아..
목차 에라토스테네스의 체 소수판정의 가장 기본이 되는 에라토스테네스의 체이다. 소수는 약수가 1과 자기자신만을 가지는 수이다. 소수를 구하는 알고리즘을 찾아보자. 알기 쉽게 예를 들어보겠다. 1~50까지의 소수 1부터 50까지의 수 중 소수를 찾는 방법을 보자 먼저 숫자를 다 적어본다. 그리고, 제일 첫번째 소수인 2의 배수를 다 지워준다. 지워주는 이유를 생각을 해보면, 소수는 1과 자기자신만을 약수로 가지는 수 이다. 어떤 수의 배수는 소수가 될 수 없다. 그러므로 범위내의 소수의 배수를 다 지워주면, 소수만 남게된다. 그렇게 2의 배수를 지우고, 3의 배수 5의 배수 7의 배수 이렇게 까지만 지워주면 나머지 수 들은 전부 소수가 된다. 왜 7까지만 지워줄까? 근데 앞에서 그러므로 범위내의 소수의 배..
목차 정말 실수를 많이 유발하는 실수 실수(mistake)가 아니라 실수(real number)에 대한 글. 이 실수는 정말 계산하기가 화가 난다. 밑의 예를 보자. void check_real(int n){ double answer = n*(1.0/n); if(answer != 1) printf("not the same number!!\n"); } int main(){ for(int i = 1; i < 100; i++) check_real(i); } 간단한 x * (1 / x)가 1인지에 대한 함수이다. 수학적으로 당연히 저 printf문은 실행되서는 안된다. 하지만 이 코드를 실행시키면, 어째서인지 한 두개의 printf문이 실행된다. 이런 경우 때문에 실수(real number) 연산은 예외를 적용..
목차 산술 오버플로 산술 오버플로는 코딩을 하면서 정말 흔하게 접할 수 있는 오류이다. (특히 C++, C에서 말이다. JAVA는 내가 안써봤고. 나머지 언어에서는 경험을 해본적이 없다.) 왜 산술 오버플로라는 오류는 흔하게 발생할까? 첫째로, 프로그램 언어는 따로 오버플로를 경고하지 않는다. 둘째로, 알고리즘을 확인하는 과정에서 논리에 집중하다 보면, 산술 오버플로를 신경쓰지 못하고 지나칠 수 있다. 그럼 산술오버플로의 사례를 살펴보자. 산술 오버플로의 사례 너무 큰 결과 C, C++, JAVA등 숫자 자료형이 크기가 제한 되어 있는 경우, 어떤 문제를 푼 결과값이 자료형의 한계를 넘어설 때 이 오류가 발생한다. 흔히 32비트 자료형을 습관적으로 사용하다가, 결과가 32비트 자료형을 넘는것을 인식하지 ..