![[세팅] pch : pre compile header 세팅, 다른 프로젝트 참조하기, 실행파일 저장위치 변경하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1s3Mc%2FbtsMBVSWud2%2FCzVGjmN68wPlZpwUEGDUBK%2Fimg.png)
1. pch(pre compile header)?컴파일러가 더 빠르게 처리할 수 있는 중간 형태로 컴파일된 (c 또는 c++) 헤더 파일.stdafx.h --> 내가 적용하고 싶은 미리 컴파일된 헤더 이름으로 변경 pch.cpp 파일 속성에서 사용이 아니라 만들기로 변경 2. 다른 프로젝트 연결하기 예를 들어, ServerCore프로젝트를 GameServer와 DummyClient가 참조하고 싶을 때 속성 설정 방법이다.GameServer와 DummyClient 모두 동일하게 속성창에 들어간다. 포함디렉터리와 라이브러리 디렉터리에 포함디렉터리: $(SolutionDir) 포함하고 싶은 프로젝트 이름 \라이브러리: $(SolutionDir) 포함하고 싶은 라이브러리 이름 \ 3. 실행파일 저장위치 변경..

WindowsWindows라는 제품명과 같이 Windows용 응용 프로그램을 프로그래밍할 때 주된 주제 하나는 '창(Window)'을 만들고 관리하는 것이다. windows 응용 프로그램의 여러 구성요소, [주 창, 도구 모음, 메뉴, 스크롤바, 버튼, 기타 대화상자 컨트롤]은 모두 창이다. 따라서 windows 응용 프로그램은 일반적으로 다수의 창으로 구성된다. 1. 자원 Windows에서는 여러 개의 응용 프로그램이 동시에 실행될 수 있다. 따라서 CPU나 메모리, 모니터 화면 같은 하드웨어 자원들을 여러 응용 프로그램이 공유해야 한다. 그렇게 되면 여러 응용 프로그램이 자원(Resource)에 무질서하게 접근하게 된다. 이를 막기 위해 windows는 응용 프로그램이 하드웨어에 직접 접근을 못..
![[ Algorithm / 벨만 포드 알고리즘 ] + 백준 1865 웜홀 문제풀이](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7b0tv%2FbtsJcgyb9SJ%2FtDQgrXX8oEqIwS7c35mL8k%2Fimg.jpg)
"벨만 포드(bellman-ford) 알고리즘 " 알고리즘 이름이 맘에 안든다. =3= 알고리즘이나 수학적 법칙을 보면 발견한 사람들의 이름으로 이름을 만든다. 직관적이지 않아서 계속 까먹게 된다. 직관적으로 이름을 지어줬으면 좋겠다. 예를 들어, "음수사이클 다익스트라" 이런식으로 ~ 1. 최단 경로 트리 (shortest-path tree), 최적해 구조(optimal substructure 알고리즘이다. 답은 여러개가 존재 할 수 있으면 가중치가 있는 그래프로 최단 경로를 찾는다. 2. 음수 사이클의 유무를 확인할 수 있다. 다익스트라랑 다른 점!!으로 음수 사이클의 발생으로 최단 경로가 무한으로 빠지는 음수차이클을 찾는다. 3. 모든 음수 간선이 문제다 ? 아니다. (-) 마이너스 값이 있는..
![[ Algorithm/ KMP 알고리즘 ]](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fo5jSN%2FbtsILlzjLjr%2Fduf9v5xcJMKfIILx4YEXLk%2Fimg.jpg)
" Algorithm/ KMP 알고리즘 " 🔸 KMP( Knuth, Morris, Prett ) Algorithm? 대표적인 상수시간 내에 할 수 있는 문자열 검색 알고리즘이다. 명칭은 알고리즘 쓰임새와 상관없이 만든 사람이름이다. 문자열 매칭 알고리즘이라고 부르는게(?) 더 좋을거 같다. 🔸 해답https://www.acmicpc.net/problem/1786"baekjoon 1786번 - 찾기"와 함께 kmp 알고리즘을 배우고 풀어보자. P: 패턴(길이: m) T: 텍스트(길이: n) 만약 모든 매칭을 하나하나 확인한다면? (n - m + 1) x m = 시간 복잡도 O(nm)목표: 시간 목잡도 O(n) 만들기. 🔥 step 1. 찾으려는 문자열 전처리 과정 거치기 접두사(이을 접 : 接..
![binary search & lower bound & upper bound [c++ 구현]](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcO74KY%2FbtsIJGrdkrg%2FfUk5v5KDOVWK6KCEoB57Sk%2Fimg.jpg)
' binary search & lower bound & upper bound ' 코딩 테스트를 하다보면 이분 탐색을 자주하게 된다. 대부분 내장함수로 사용하면 되지만, 문제 종류에 따라서 직접 구현해 조건을 더해야 풀 수 있는 경우가 있다. c++ 기준으로 이진 탐색 함수는 총 3가지가 있다. 이 세가지 모두 이진 탐색이 기반인 알고리즘이므로 데이터가 오름차순으로 정렬이 되어 있어야 한다. 1. [ #include ] std::binary_searchval값이 있는지 없는지 확인하는 알고리즘 [ return bool ] std::lower_bound를 이용하여 구현한 알고리즘. 2. [ #include ] std::lower_bound val값의 시작 위치를 찾는 알고리즘 3. [ #include..

" 함수 뒤 const " class Test { public: void ResizeVector(int num) const { vec.resize(num); } private: vector vec;} 위에 있는 함수는 컴파일이 될까? 정답은 안된다. 이유는 함수 뒤 const 때문에 vector 내장함수인 resize를 사용할 수 없다.함수 const에 대해서 간단하게 알아보자. [ 의미 ] - 해당 함수에서는 해당 객체의 멤버변수를 변경할 수 없다. - 여기서 이번에 새로 알게 된 사실은 멤버변수에 순차 컨테이너 vector가 있었는데 vector 내장 함수도 제한 받는다는 것이다.어찌보면 당연한거지만 ...? 컴파일 전에 오류메시지를 뱉는게 신기했다...
![[windbg] windbg 사용하기, 덤프 분석하기](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJjbvp%2FbtsId8AlwfT%2FZ7bjY2AASbK42kScmE6Hok%2Fimg.png)
"[windbg] windbg 사용하기, 덤프 분석하기" 1. 덤프를 읽을 심볼과 심볼에 맞는 소스코드 경로를 연결시킨다. 2. 덤프를 windbg에 드래그 드롭 또는 open으로 파일을 열면 이런 화면을 볼수 있다.Loading Dump File : 덤프 파일의 위치, 덤프 종류 Executable search path is : 덤프가 발생한 OS Debug sesstion time : 덤프 발생 시점 시간 Process Uptime: 부팅 이후 동작한 시간 3. !analyze -v 명령어 실행 !analyze-v 명령어를 실행하면 더욱 자세하게 덤프 내용이 나온다.FAULTING_IP: 어떤 부분에서 문제가 일어났는지 표시한다. callstack의 마지막 부분이다. KERNRLBASE.ddl..
"[ assembly 명령어 ] mov, lea" mov ( move ) - 데이터를 복사하는 명령어 (*이동이 아님 주의) [예시]1. mov eax, dword ptr [ a ] : a의 주소가 가리키는 4바이트(Dword) 값이 eax에 저장한다. 2. mov eax, [adr] : adr주소가 가리키는 값을 eax에 저장한다.3. mov dword ptr [ a ], 3 : a에 3 값을 저장한다.4. mov eax, [ rbx + 8 ] : rbx주소값에 + 8을 한 주소로 가서 그 안에 있는 값을 eax에 복사한다. 5. mov [rcx], rax : rcx레지스터가 참조하는 주소의 메모리에 rax 레지스터의 값을 저장한다. Lea ( Load Effective Address )- 유효..

"c++20 STL::Container #2" 1. contains기존 map, set 데이터 find함수 사용 시 반복자와 end반복자가 같지 않은 지 비교하는 방식이였다. std::set s {1, 2, 3, 4, 5}; auto findset = s.find(2);if (findset != s.end()){ cout m {{1, 1000}, { 2, 2000 }}; auto findmap = m.find(2); if(findmap != m.end()){ cout second c++20에서 새로 추가 된 contains는 associate container의 내장함수로 찾으려는 키값을 넣으면 true, false로 그 key의 존재 여부를 알 수 있다. if (findset.contains(2)..

"c++20 STL::Container #1" 1. std::to_array std::array 만드는 방법이 추가되었다. //암시적 타입 추론 auto ToArray = std::to_array("Hello World");//명시적 타입 추론auto ToArray = std::to_array({ 1,2,3,4,5,6 }); 2. std::erase, erase_if 기존에 vector 데이터 중 특정한 조건에 부합하는 데이터를 삭제하려고 할 때 여러가지 방법과 문제점을 알아보자.// 1번 ====================================================================vector vec {-1, 2, 3, 4, -5, 7, -2, 3 }; for (auto i..