C++ 3

[C++] 소수 구하기 최적의 알고리즘 (2) - 에라토스테네스의 체

소수 구하기 최적의 알고리즘 1편에서 (http://marobiana.tistory.com/89) 주어진 수보다 작은 수의 소수들로 나누는게 성능이 좋다고 했었는데, 그것보다 더 좋은 알고리즘을 찾아냈다.ㅋㅋ 이것보다 더 좋은 방법은 아마도 없을 것이라 자신함 !! 만약 있다면 댓글 달아주시기 바람. 요번에는 c++로 구현해보았음. 1. 알고리즘 에라토스테네스의 체 (Sieve of Eratosthenes)라는 알고리즘이다. 아래 그림을 보면 무엇인지 알 수 있다. 120까지의 모든 소수를 구한다고 해보자. 2부터 120까지 배열에 모두 넣은 후 소수가 아닌 것들을 모두 체크해버리는 것이다. 2를 제외한 모든 2의 배수를 체크한다. 3을 제외한 모든 3의 배수를 체크한다. 4는 아까 체크당했으므로 소수 ..

[C++] 두 정수 사이의 모든 합 구하기

어제 올린 글에는 최적화를 생활화하자는 글을 썼었는데, 오늘은 반대로 최적화를 잘못하면 화를 부를 수 있다는 것을 정리해보고자 한다ㅋㅋㅋㅋ 1. 문제 두 정수 사이의 모든 합을 구하는 것이다. 3, 5를 입력받으면 3 + 4 + 5 를 한 결과를 출력하면 됨. 작은 수부터 입력 받는다고 가정하자. 2. 알고리즘 가장 먼저 생각할 수 있는 알고리즘은 입력 받은 수부터 두번째 입력 받은 수 까지 반복문 돌리면서 더하는 것이다. 반복문을 좀 줄여본다면??? 1 + 2 + 3 + 4 + 5 + 6 를 보면 규칙을 찾을 수 있다. 1 + 6 = 7 2 + 5 = 7 3 + 4 = 7 이것을 이용하면, 포문을 반으로 줄일 수 있다! 여기서 잠깐, 더할 수의 개수가 홀수이면 이렇게 된다. 1 + 2 + 3 + 4 +..

C++ 의 virtual 함수. 가상화. JAVA랑 C++의 차이점

가상화에 대해서 검색해보다가 사소하게 생각하며 지나친 부분에대해 새로이 알게됐다.C++에 있는 virtual 키워드의 용도, 그리고 JAVA와의 차이점을 알게 되었다. 1. C++에서의 상속 class Parent { public : Parent(){}; ~Parent() {}; void foo() { std::cout > parent!!! Parent* p = new Child(); 이 것을 통해 불려진 foo함수에서, child의 foo가 아닌 parent의 foo가 호출되는 것을 볼 수 있다.이유는, 컴파일러가 포인터의 타입을 보고 타입에 맞는 메소드를 찾아주기 때문이다. 그러나, 부모의 foo 메소드 앞에 virtual 이라는 키워드를 붙인다면???부모가 아닌 child의 foo 메소드가 호출된다..

개발/JAVA 2013.07.26