본문 바로가기

[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를 의미하지 않습니다. 지금부.. 더보기