본문 바로가기

Program Language and Algorithm

(17)
C++를 이용한 피보나치 수열 구현 (fibonacci) 이 포스트의 목적은 가끔 예제로 이용하는 피보나치 수열을 구현하는 방법에 대한 포스트입니다. 만들어 보니 7가지가 나왔으며, 버전에 따라 재귀 호출, 메모리제이션 등을 이용해 최적화하는 방식으로 구현됩니다. 먼저 피보나치수열을 알아봐야죠. 피보나치수열은 아래 규칙을 따르는 수열입니다. $$f_0 = 0$$ $$f_1 = 1$$ $$f_n = f_{n-1} + f_{n-2} \quad ( n \in\left \{2,3,4,\cdots\right\} )$$ 구조는 단순하지만 구현 시 오버플로우와 중복 연산에 주의해야 합니다. 그럼 먼저 간단히 구현해 보겠습니다. 별다른 소프트웨어 공학의 기술이 들어 가진 않지만 설계 시엔 약간 두통을 유발합니다. #include #include using namespace ..
Std::Vector 사용하기 C++의 기초 문법이라는 험난한 산들을 넘고 나면, Standard Template Library (STL)이라는 산이 기다립니다. 그동안 넘어온 산들에 비하면 진입 장벽이 높지 않으나 잘못 사용하면 독이 되기도 하는 양날의 검이기도 합니다. 이 포스팅에서는 STL 중 가장 쉽고, 널리 사용되는 Vector에 대해서 포스팅 하겠습니다. 먼저 사용법을 언급하고, 장점을 보여 드린 뒤, 단점을 보여드리려고 했는데, 예제를 못 만들겠어요.. 컴파일러 개발자들 일 잘하네.. 주의점을 보여드리겠습니다. Vector를 개념적으로 표현하면 동적배열 입니다. 배열을 쓰는데 그 크기가 동적으로 변화 하며, 사용자가 원하는 대로 늘려서 쓸수 있습니다. 장점은 귀찮기만 한 메모리 관리를 컴파일러 혹은 OS가 알아서 해준다는..
배열의 초기화 ( memset) 일반적인 컴퓨팅 디바이스에서 배열의 초기화는 필요 없는 경우가 많습니다. 소프트웨어 엔지니어가 신경 쓰지 않아도 알아서 0으로 초기화해주기도 하고, 알고리즘 구조상 필요 없는 경우도 많습니다. 하지만 만약 Arm과 같은 프로세서를 이용한다면 특별히 초기화에 신경 써 줄 필요가 있기도 하고, 사실 초기화 시간이 오래 걸리는 작업도 아니기에 해주는 게 좋습니다. 먼저 C와 C++에서 모두 쓸수 있는 방법으로 시작하죠. 배열을 초기화하는 가장 간단한 방식은 아래 코드와 같이 반복문으로 초기화하는 거죠. 간단하고 가독성도 높습니다. 무엇보다 아래 코드에서와 같이 원하는 값으로 쉽게 설정할 수 있습니다.(input) #include using namespace std; const int N = 1024; int ..
c++ STL sort descending 내림차순 정렬 이번 글은 간단한 포스트 입니다. 알고리듬 공부를 하다 보니 sort를 내림차순으로 정렬하는 팁이 있더군요. 일반적인 sort 함수는 오름차순으로 정렬하는 점을 이용해서, 해당 책의 저자는 데이터 입력시 데이터를 음수화 해서 최적화를 시도했습니다. 그걸 보고 문득!!! C++에서 제공하는 내림차순 정렬 기능과 제안해준 기능의 성능차는 어떻게 될까하는 의문이 생겨서 시험해본 내역 입니다. 일반 c++ sort function 을 내림차순으로 실행하려하면 세번째 argument에 옵션을 추가하면 됩니다. sort function의 사용법과 옵션에 관련된 내용은 적합한 링크로 갈음합니다. http://www.cplusplus.com/reference/algorithm/sort/ sort - C++ Refere..
전역변수와 지역변수가 같은 이름 일때 전역변수에 접근하기. C언어를 배우기 시작해서 중반부에 들어 가면 변수의 접근범위에 대해 배우게 되는데요.전역, 지역, static, extern등을 배우게 됩니다. 이중에서 이번 주제는 딱 두개 전역과 지역 입니다. 일단 두가지의 변수의 범위에 대해서는 배웠다는 전제하에 써내려 가겠습니다. #include int a = 1; int main(){ printf("%d\n", a); { int a = 2; printf("%d\n", a); } printf("%d\n", a); return 0; } 위 의 코드에서 결과물은121이죠. 첫번째와 세번째는 전역 변수 a에 접근한거고 두번째는 지역변수 a에 접근한 결과 입니다. 하지만 만약 2번째에서도 전역변수에 접근하고 싶다면 어떻게 해야 할까요. 일반적인 문법으로 c언어에서는 불가..
Posix 문자 시트 vi를 사용하는 분이라면...반드시 가지고 있어야 할 그 posix 문자열 시트 입니다. 이 녀석들을 사용 할때와 사용 하지 못할때의 편집능력 차이는 엄청나죠..^^ http://www.addedbytes.com/cheat-sheets/regular-expressions-cheat-sheet/
vi로 코딩하기~~vol.3 ctags의 활용 이번엔 누구나 알듯한 ctags에 대해 다루도록 합니다..^^ ctags는 속도가 빠른 vi에게 날개를 붙여 주는 프로그램이죠..^^ ctags라는 날개를 얻음으로서 vi는 함수들 사이를 마구 마구 날아다닐 것입니다. vi의 장점은 숙련 되었을때 높은 에디트 능력과 속도를 제공한다는 데에 있습니다. 그 주요점은 검색&치환 입니다.windows를 사용할때 우린 검색 기능은 사용하지 않습니다. 드라이브 전체를 뒤지는 일이 있어도 윈도우의 내장 검색 기능은 무시해 버리죠...왜냐하면 한번 돌리면 퇴근해야 하니까요..ㅡㅡ;; 하지만 리눅스는 다릅니다. 현재 제 피씨의 하드 디스크는 320기가와 서브 백업용으로 1테라 입니다. 320기가는 거의 모든 영역을 사용하고 있구요. 하지만 리눅스의 검색명령을 내리고 키보..
vi로 코딩하기~~vol.2 vi의 친구들 플러그인 이번 편에선 미리 써 놓았던 데로 키 매핑입니다. 말이 키 매핑 이지...이건 사용자가 원하는 데로 하는 거니까....이번 편의 부제목 대로 플러그 인쪽에 가깝겠죠... 앞서 저는 vi의 유용한 키들을 설명하였습니다. 그런 키들은...혼자서 사용되는것 보다 여러키가 복합적인 효과를 주는게 더 많습니다. 첫번째 설명할 폴딩,폴딩해제 기능이 그런것이라고 볼수 있죠. 우선 프로젝트를 들어 가야 겠죠...이번엔 복수의 파일을 같이 열도록하겠습니다. 명령은 다음과 같은 형태죠. vi *.c src/*.c 복수의 파일을 여는 이유는 태그리스트와 버퍼익스플로러를 설명하기 위함입니다... 그럼 설명보다 스샷..ㅋㅋ 보시면 함수 하나가 이름만 남고 접혀져 있죠...이게 폴딩 기능 입니다....이건 기나긴 코드를 볼때 필..