test
Debugging The Future
Saturday, August 23, 2025
Tuesday, January 3, 2023
Far Manager 세팅
1. SourceForge에서 mingw-w64 설치. 인터넷 다운로드 방식으로 받으면 에러가 뜨면서 안되는 경우가 많아서 직접 압축 파일로 받은 후, C 드라이브나 본인이 원하는 곳에 mingw-w64라는 이름의 폴더를 만든 후 그 안에 압축을 해제. 그리고 환경 변수에 압축을 해제한 곳에 있는 bin 폴더를 등록해준다.
2. Far Manager 및 Conemu 설치
3. True Template 3을 다운로드 받고(암호: yldbear), Far Manager가 설치된 폴더 - Plugins에 TrueTemplate 이름으로 폴더를 하나 만들고 그 곳에 압축 해제
4. Far Manager의 Option - Editor settings에서 탭 사이즈 4, 자동 들여쓰기 체크 그리고 Save Setup을 해줘야 설정이 저장됨
5. Commands - File associations에서 *.cpp 추가 후 Execute command 옵션에 g++ 실행 및 원하는 옵션 추가. 현재 사용 중인 옵션: g++ !.cpp -o !.exe -ggdb -DDEBUG -Wl,--stack=268435456 -O2 -std=c++14
6. TrueTemplate - templates - source 폴더에서 Blank.c를 열고 원하는 템플릿으로 수정
Sunday, January 1, 2023
Visual C++ DLL 및 MFC 프로젝트 개발 전 준비 관련
개발을 진행하면 헤더(.h)와 소스 파일(.cpp)들을 필요에 따라 계속 만들게 되고, 폴더를 만들고 정리해두면 관리가 용이하고 보기에도 좋다. 사람마다 정리하는 방법이 다르겠지만 나는 아래와 같이 폴더 구조를 만든다.
/[프로젝트명] - 프로젝트 최상위 폴더/bin - 실행 파일
/obj - 빌드 중간 생성 파일
/include - 헤더 파일 (*.h)
/src - 소스 파일 (*.cpp)
/build/[프로젝트명] - *.vcxproj와 같은 프로젝트 설정 파일, 기본 생성되는 *.cpp 및 *.h
/res - 리소스 파일
현재 directx를 사용한 렌더링 엔진 및 해당 엔진을 사용한 모델 뷰어를 MFC로 개발하고 있다. 그래서 DLL 프로젝트 및 해당 DLL을 사용하는 MFC 프로젝트의 설정 방법을 예로 들어서 정리했다.
1. 폴더 생성 및 파일 이동
2. 솔루션의 프로젝트 제거 및 추가 / 각 필터에서 항목들 모두 제거 후 다시 추가
3. MFC 프로젝트 솔루션에 DLL 프로젝트 추가
4. 프로젝트 설정 변경
두 번째로 General에서 출력 파일과 중간 생성 파일들의 생성 경로를 설정해야 한다. 특히 출력 파일은 두 프로젝트 모두 동일하게 되도록 설정하는 것이 관리가 편하다. 다만, 경로 이름을 절대적으로 써넣는 것보다 VS에서 제공하는 매크로를 사용하는 것이 매우 유용하다.
세 번째로 C/C++ - General - Additional Include Directories에 폴더 구조에 따라 새로 변경된 헤더 파일들이 들어 있는 폴더 경로를 입력한다. 그리고 만약 솔루션을 빌드하게 된다면 두 프로젝트가 함께 빌드 되는데, MFC 프로젝트에서는 당연히 DLL 프로젝트의 헤더 파일들을 사용하게 됨에 따라 DLL 프로젝트의 헤더 파일 경로가 필요하다. 따라서 MFC 프로젝트 설정에는 DLL 프로젝트의 헤더 파일 경로를 별도로 넣어준다. 필요한 경우에는 리소스 파일을 위해 Resources - General - Additional Include Directories도 수정이 필요하다.
네 번째로 *.lib 파일을 위해서 Linker - General- Additional Library Directories를 입력한다. 두 번째 변경 사항에서 출력 파일 경로를 통일했다고 가정하면 추가 라이브러리 디렉토리는 출력 파일 경로와 동일하게 설정해주면 되고, 출력 파일 경로를 통일하지 않았다면 DLL 프로젝트의 출력 파일 경로와 동일하게 설정해주면 된다. 사용할 *.lib 파일 이름도 Linker - Input - Additional Dependencies에 넣어줄 수 있다. 이게 싫다면 헤더에 #pragma comment(lib, "*.lib")를 넣어줘도 된다.
5. Project Dependencies 관련
* Precompiled Headers 관련
Saturday, September 24, 2022
DirectX 12를 이용한 Model Viewer 개발 시작
DirectX 11을 1년 전에 잠깐 공부하다가 사정이 생겨서 관뒀는데 여유가 생겨서 그래픽 쪽을 다시 공부하고 있다.
low-level API나 ray tracing에 관심이 없다면 DirectX 12를 공부할 필요는 없다고 듣긴 했지만 11이 나온지도 13년 정도 됐고 그래픽을 계속 공부할 계획이라면 결국 새로운 버전을 익혀야 한다. 따라서 굳이 11을 할 필요는 없을 것 같아서 어려워도 12를 공부하여 모델 뷰어를 개발할 생각이다.
초기 기능은 fbx 파일만 임포트 가능하게 만들어 모델 및 애니메이션을 화면에 표시해주고 가장 기본적인 라이팅(디퓨즈, 스페큘러, 앰비언트) 정도만 구현할 생각. 개발하면서 블로그에 정리하고 싶은 경우, 일지 형식으로 진행 상황을 가끔 올릴 수도 있을 듯 ...
Saturday, February 20, 2021
BOJ 1038: 감소하는 수
* 하나의 정수는 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} 집합 내의 숫자로 이루어진다.
* 단조감소는 고려하지 않기 때문에 최대 크기의 수는 9876543210이다.
* 위 집합의 부분집합에서 조건을 만족하는 수는 단 하나: 총 210 - 1가지 경우의 수가 존재
* 가능한 수들을 모두 조합하여 cand에 저장하고, 오름차순 정렬
#include <bits/stdc++.h>
using namespace std;
vector<long long> cand;
void dfs(long long num) {
long long last = num % 10, new_cand = num * 10;
for(int i = 0; i < last; ++i) {
cand.push_back(new_cand + i);
dfs(new_cand + i);
}
}
int main(void) {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n;
for(int i = 0; i < 10; ++i) {
cand.push_back(i);
dfs(i);
}
sort(cand.begin(), cand.end());
if(n < cand.size()) cout << cand[n] << '\n';
else cout << "-1\n";
return 0;
}
Monday, June 29, 2020
AtCoder Beginner Contest 172 업솔빙
Sunday, June 28, 2020
LIS를 구하는 두 가지 방법
1. 동적 계획법
위 1번 방법으로 LIS 풀이를 시도하면 LIS의 길이 값은 얻을 수 있지만, LIS를 구성하는 실제 원소들은 얻을 수 없다. 그리고 n이 10000이 넘어가기 시작하면 빠른 시간 내에 답을 얻기가 힘들다. 이진 탐색을 사용하면 시간 복잡도를 O(nlog2n)으로 줄이면서 실제 LIS도 얻을 수 있다. 실제 LIS를 얻을 수 있으므로 LIS 길이 값은 당연히 따라온다. 1번 방법때처럼 길이가 6인 배열 A가 있다고 가정하며 메모이제이션을 위한 벡터 dp도 함께 생각해보자. dp는 처음에 완전히 비어있는 벡터이다. 아래에서는 이진 탐색을 사용하여 어떻게 문제를 해결하는지에 대해 설명하였다.

