3085 사탕 게임

이 문제는 일단 전부 교체해보지 않는한 최대값을 알수 없는 문제가 있다. 결국 브루트 포스 문제이다. 답은 아래와 같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 더보기…

글쓴이 kudwafter,

2231 문제 분해합 풀이

생성자 M이 N을 만들수 있다. N이 주어질경우 M을 찾아라 하지만 주어진건 N이기때문에 이를 딱히 찾을 방도가 없다. 그렇기 때문에 이문제는 무차별 대입으로 풀어야한다. 여기서 빅오를 줄일 방법이 존재하는데 M은 N보다 작다는 점이다. 왜냐하면 M은 N의 분해합을 하기때문에 작을수가 없다. 소스는 다음과 같다.   1 2 3 4 5 6 7 더보기…

글쓴이 kudwafter,

2309 문제 일곱 난쟁이문제 풀이

깊이 우선탐색처럼보이지만 다른 방법으로도 쉽게 풀수 있다. 조합을 이용하는 것이다. 가짜를 뽑는경우의 수를보면 9c2이니 총 가지의수는 (9*8)/(2*1) 이 나오게 된다. 여기서 중요할점은 가짜를 제외하고 뽑을경우 총합이 100이 되면 가짜가 자동으로 나오게된다. 아래는 그 코드이다.   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 더보기…

효율적으로 디버깅하기 SEH와 minidump

다음과 같은 소스 코드가있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include <iostream> #include <Windows.h> #include <chrono> #include <mutex> #include <DbgHelp.h> int main() {     try {         int* A = NULL;         *A = 100;     }     catch (… ) {         std::cout << “hello world” << std::endl;     } } Colored by Color Scripter cs auto;”>이 예제는  access violation의 한 예이다. 해당 예제를 더보기…

글쓴이 kudwafter,

C++ std::function 구현에 대해

오래전부터 std::function에 대해 꽤 궁금해왔다. 그 이유는 std::function<int(void)> 이런 형태이기 때문이다. 이를 어떻게 만들려면 어떻게 해야하나 맨첨에 생각할때는 다음과 같이 생각하였지만. 이는 내가 원하는 방식이 아니므로 넘어갔다. 1 2 3 4 5 6 template <typename T, typename… Args> class function{ } Colored by Color Scripter cs 비주얼 스튜디오에는 std::function코드는 다음과 같다. 1 2 3 4 더보기…

글쓴이 kudwafter,

32비트와 64비트를 따로 제공하는 라이브러리를 통합시키기

제가 자주 쓰는 기법이긴한데 큰 도움이 될지 모르겠지만 한번 올려본다. 이 기법을 자주 쓰는 큰예로 mysql있는데 mysql Connector라이브러리을 보자면 32비트와 64비트가 따로 있다. 이 말은 프레임워크 제작시 32비트 64비트라이브러리를 지원하기위해 거의 99%동일한 소스파일을 프로젝트 풀더에 모든 버전의 라이브러리를 전부 넣어야 한다는 의미이다. 나는 아래와 같은 해결방법으로 이 문제를 해결한다.   더보기…

현재의 HTTPS의 차단과 앞으로의 차단방법으로?

현재 통신사가 일부분의 지역에 대해 불법 사이트를 차단하고 있다. 과거에는 HTTP 패킷의 일부 값만 보고 차단하는 방면에 HTTPS에는 기술적어려움때문에 차단을 안하고 있었다. 하지만 최근에 불법 웹툰으로 인해 한국 웹툰 시장이 위험하다보니 진짜 차단을 했다. HTTPS는 패킷의 내용이 암호화가 되어 있어 차단이 힘들다. 물론 SSL inspection 기술을 이용하면 패킷의 내용을 보면 더보기…

DirectXMath 라이브러리

다이렉트에서는 수학적 라이브러리를 따로 제공하고있다. 해당 라이브러리는 사용할려면 xnamath.h 추가했어야했지만 언제부터인지 현재 2017에서는 DirectXMath.h 로 바뀌었다. 이 라이브러리의 특징은 SSE2의 명령집합을 사용한다는 점이다. 이는 SIMD의 레지스터를 사용해서 여러개의 값을 한번에 처리 할수 있다는 의미이다. VS 2017에서는 따로 라이브러리 속성에 추가할 필요가 없이 바로 사용가능하다. 먼저 간단한 0행렬과 단위행렬을 출력하는 코드이다. 1 2 더보기…

글쓴이 kudwafter,

메타프로그래밍으로 소수구별과 응용

메타프로그래밍이란 흔히 컴파일타임에 프로그램이 돌았던거를 컴파일타임를 연산을 시켜 런타입 시간을 줄이는 기술이다. 이 기술은 템플릿이라는 거를 응용해서 만든 기술이다. 템플릿은 기본적으로 컴파일 타입때 타입체킹등 값을 미리 넣는 작업을 한다. 소수 구하는 함수는 다음과  같다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 더보기…

type traits로 is_class 구현하기

C++에는 type traits라는게 있다. 이는 컴파일 타입에 타입의 traits을 알기위해 사용한다. 간단한 예로 같은 타입인지 구하기 위해서는 이렇게 작성했다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 struct true_type { enum {value  = true}; }; struct false_type { enum { value = false }; }; template<typename T, typename U> 더보기…