본문 바로가기

Programming

주요 클래스 계층도 주로 사용하는 클래스 계층도.. 정리가 되는데로 차근차근 분석할것이다. 더보기
[Algorithm] 징검다리 건너기 Algorithm Description:: 숫자가 쓰여진 징검다리를 건너는 경우 밟은 징검다리의 숫자 만큼의 돈을 지불하는 경우 최소의 돈으로 건너는 방법을 구하는 문제이다. (단 ,2 칸 까지 점프 할 수 있다고 하자.) 1. 징검다리가 2 개 있다면 징검다리를 하나도 사용하지 않고 건널수 있으므로 지불할 돈이 없고2. 징검다리의수가 3 개이고 쓰여진 숫자가1 9 3 이면, 첫 번째 징검다리를 밟고 지나간다면 1 원으로 건너는게 최소이다.3. 징검다리 수가 10 개 이고 쓰여진 숫자가 아래와 같다면최소로 건널수 있는 비용은 2+2+1+2 = 7 이다. 입력 방법입력의 첫째 줄에는 징검다리 수(10000 이하인 양의 정수)가 주어지고 , 다음 줄에는 차례대로 징검다리에 씌여진 숫자(100 이하인 양의 정.. 더보기
[OGRE 3D]개발환경 구축 및 App wizard 설치 ::Contents 1. OGRE 3D Download 2. OGRE 3D Build 3. 환경변수 설정. 4. VisualStudio 2010 Setting 5. App wizard설치 6. Test Example Application 1.OGRE3D Download LINK : http://www.ogre3d.org/download/sdk 위 링크에서 VS버전에 맞는 SDK를 다운 받는다. 다운로드 받은파일을 실행하여 설치한다. 설치경로 : C:\ 2.OGRE3D Build -OGRE3D가 설치된 경로를 열어 OGRE.sin을 실행한다. -프로젝트 탭에서 빌드 >> 일괄빌드 선택후 모두 빌드한다. 3.환경변수 설정 - SDK를 사용하기 위해서 환경변수를 사용하여야한다. - 컴퓨터 >> 속성 >> 설정.. 더보기
[Algorithm]BackTracking 백트래킹 알고리즘은 일어날수 있는 모든 경우의 수를 고려해, 각 경우의 수별로 조건에 만족하는지 찾아 해가 될수 있는지 없는지 판별하는 알고리즘이다. 일어날 수 있는 경우의수를 다 검색 하기 때문에 해는 반드시 존재한다는 특성을 지니고 있다. :: Bit-pattern 두 정수 n , k 를 입력으로 받아 k 개의 1 을 가진 n 자리 이진 패턴을 출력하는 프로그램을 작성 하세요. 입력두 정수 n , k 가 입력으로 주어진다. (0 < n 더보기
[C++11] Rvalue Reference #2 - Move Semantics Move Semantics Move Semantics란 객체의 리소스(동적으로 할당 된 메모리와 같은)를 또 다른 객체로 전송(이동)하는 것을 의미합니다. 앞에서 살펴보았던 Rvalue 참조자는 Move Semantics의 구현을 가능하게 하고 이로 인해 상당한 성능을 향상시킬 수 있습니다. Rvalue는 프로그램 어디에서도 참조될 수 없는 임시 객체이지만 Rvalue 참조자를 이용하여 임시 객체의 리소스를 이동시킴으로서 쓸데없는 메모리 할당과 복사 작업을 생략하여 성능이 향상되는 것이죠. 복잡한 설명보다는 간단한 예제를 보면서 설명을 드리는게 좋을 것 같네요. 메모리 버퍼를 관리하는 MemoryBlock 이라는 클래스를 작성하고 이 클래스 객체를 vector에 삽입하는 코드를 작성해보도록 하겠습니다. .. 더보기
Lvalue Rvalue C++ Lvalue와 Rvalue에 대한 오해Lvalue와 Rvalue는 보통 Left-value(왼쪽값)과 Right-value(오른쪽값)로 풀어서 씁니다. 이 때문에 대입 연산자(=)를 기준으로 왼쪽에 위치하는 값이 Lvalue이고 오른쪽에 위치하는 값이 Rvalue라고 이해하고 계신 분들이 많습니다. 이것은 C 표준에 입각하여 살펴보면 완전히 틀린 얘기는 아니지만(C 표준에서는 대입 연산자(=)를 기준으로 왼쪽과 오른쪽에 모두 사용될 수 있는 값은 Lvalue이고 오른쪽에만 사용될 수 있는 값이 Rvalue라고 정의하고 있습니다) 잘못된 이해이며, C++ 관점에서는 전혀 다른 관점에서 해석할 필요가 있습니다. C++ 표준에서는 더이상 에서 L과 R은 Left와 Right를 의미하지 않습니다. 지금부.. 더보기
에러 핸들링(Error Handling) window함수들은 반환형을 가지고 있다. 반환타입은 대개 함수의 성공과 실패를 나타내는 데 쓰이며, 각 자료형의 의미는 다음과 같다. 자료형 실패했을 때의 값 VOID 이 함수는 절대 실패 하지 않는다. BOOL 성공시 0이 아닌 값, 실패하면 0 (주의 : 성공시 0이 아닌 값이기에 TRUE(1)과 비교하지 말자) HANDLE 성공시 유효한 핸들, 실패하면 0(NULL) or (INVALID_HANDLE_VALUE) 실패의 경우가 나뉘므로 SDK를 참조하여 프로그래밍을 하자. PVOID 성공시 데이터를 저장하고 있는 메모리 주소를 반환, 실패시 NULL반환 LONG/DWORD HANDLE과 마찬가지로 실패의 경우가 각 함수마다 다르므로 SDK를 참조하여 프로그래밍을 하자. 함수가 실패하는 경우에는 전.. 더보기
[MFC] Console 생성하기 BreakPoint로 디버그가 편하긴 하지만 동작하는 화면을 보면서 해당 수치를 확인 해야할 경우가 많이 생깁니다. 콘솔창을 띄워서 printf를 쓰면 상당히 편하죠.. 적당한 위치에 다음과 같이 선언해 줍니다. 윈도우보다 먼저 실행되어야 한다고 하는 얘기가 있는데 어떤 경우인지는 잘 모르겠습니다. 유니코드의 경우 #pragma comment(linker, "/entry:wWinMainCRTStartup /subsystem:console") 멀티바이트의 경우 #pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console") 저같은 경우 최종적으로 이렇게 씁니다. stdafx.h 헤더에 선언하고 디버그 일때만 작동하도록 선언합니다. #ifdef .. 더보기
Multiple Stack Multiple Stack : 배열스택은 처음에 크기가 고정되어 있다는 단점이 있다. 적게 잡을경우 데이터가 많이 몰려 스택에 데이터를 넣지 못하는 문제가 있을 수 있고, 이를 고려해 스택의 사이즈를 최대로 잡아 버리면, 쓰이지 않는 메모리 공간이 많이 낭비가 된다는 점이다. Multiple Stack은 이러한 배열스택의 문제점을 조금이나마 줄이고자 하는데 있으며, 기본적인 개념은 스택과 동일하다. Multiple Stack에서 추가된 개념은 각 스택을 구분하는 경계선(Boundary)이다. Boundary는 Stack의 개수 +1이며 Boundary[0]< Stack[0] 더보기
Stack 1. Stack :스택은 자료를 보관하는 방법을 기술한 자료구조 중 하나의 방법이다. 제한적으로 접근할 수있는 나열 구조로서, 그 접근 방법은 언제나 목록의 끝(top)에서만 일어난다. 스택의 기본적인 연산은 한쪽 끝에 자료를 집어넣는 Push와, 반대로 데이터를 꺼내는 Pop이 있으며, 자료의 입력과 출력의 형태가 최근에 넣은값(나중에 넣은값)이 먼저 나오는 구조여서 LIFO(Last In First Out)라고도 불리운다. 더불어, 스택에 자료가 비었는지 판단하는 isEmpty()와 가득 차있는지 판단하는 isFull() 있다. Keyword Description top Stack의 끝을 나타내며, 자료의 입력과 출력이 일어나는 곳이다. push() Stack에 새로운 자료를 넣는 함수(top을 증가.. 더보기