분류 전체보기
[실1] 11286 - 절대값 힙
#include #include #include #include using namespace std; #define y first #define x second int main() { using pq_type = pair; cin.sync_with_stdio(0); cin.tie(0); priority_queue q; int n; cin >> n; for (int i = 0; i > val; if (val != 0) q.push({ abs(val), val }); else { if (q.empty()) cout
C++ 구조적 바인딩 (Structured Bindings)
C++17부터 지원하는 structured binding이란 어떤 배열, STL 같은 컨테이너에서 멤버들을 쉽게 바인딩할 수 있도록 도와주는 문법이다. 친숙한 std::map을 예시로 바인딩을 해보자. #include #include int main() { std::map mp; for (int i = 1; i < 11; i++) { mp[i] = i * i; } // iterator, basic for for (std::map::iterator it = mp.begin(); it != mp.end(); it++) { std::cout first
C++ STL 설명과 for-range 기반 loop
STL(Standard Template Library)은 C++ 내 템플릿 클래스들의 집합이며, 개발자에게 도움줄 수많은 자료구조와 함수들이 구현 되어있다. 기본 4가지로 구성 되어있다. 알고리즘 헤더 파일 내 (정렬, 탐색 컨테이너 (선형,비선형 자료구조) 예) , 함수 이터레이터 (반복자) 모든 컨테이너들은 이를 지원하지 않음. STL은 기본적으로 범위 기반 for문을 돌려 원소에 접근할 수가 있다. 핵심은 4번에 있다, 이를 실행할 수 있는 조건이 바로 .begin() 함수다 즉 첫 원소의 주소를 이터레이터 형태로 반환하는 함수다. 예) for(auto item : 컨테이너 이름) 여기서 한 가지 의문점이 들 수도 있는데 const auto : const auto& : auto : auto& : 위..
[실1] 1991 - 트리 순회
#include using namespace std; int n; struct node { char left; char right; }; struct node tree[100]; void preOrder(char root) { if (root == '.') return; else { cout t1 >> t2 >> t3; tree[t1].left = t2; tree[t1].right = t3; } preOrder('A'); cout left); cout data; In_order(_node->right); } // (왼쪽, 오른쪽, 루트) void Post_order(s_node* _node) { if (!_node) return; Post_order(_node->left); Post_order(_node..
아핀 변환 Affine Transformation
어떤 모델이든 아핀 공간에 있는 모델들은 점들의 집합이라고 했다. 그 점들이 어떤 식으로 있느냐가 모델을 만든다고 했다. Vertex가 모여 모델을 이룬다. 점들의 개수에 따라 모델의 질이 달라진다. 그 점 중에서도 모델을 위치시키기 위해서 다른 점이 하나 더 필요하다. 바로 중심점이라는 것이다. 중심점을 기준으로 나머지 점의 위치를 상대적으로 표현한다. 원점에서 각 점으로 향하는 8개의 벡터가 있다고 하자. 만약 크기를 어떤 축으로 늘리고 싶으면 8개의 벡터에 해당 축에 해당하는 크기 변환 행렬을 적용한다. 그렇게 되면 8개 벡터에 대한 새로운 벡터가 나오고 다시 벡터의 끝 점이 원점의 기준에 의해 바뀔 것이다. 모델의 중심점이 원점에 있을 때 모델의 크기 변환은 모델을 이루는 점들을 벡터처럼 생각하고..
렌더링 파이프라인 순서 및 기본 설명과 기본 지식 (Rendering Pipeline)
고정 기능 파이프 라인( Fixed Pipeline ) - D3D에 미리 정해진 연산을 수행할 수 있도록 제공되는 기능이 고정기능 파이프라인이다. - 정해진 연산만 수행하므로 프로그래머가 GPU 연산에 관여할 수 없다. 프로그래머블 파이프라인 ( Programmable Pipeline ) - 고정 기능 파이프 라인에서 제공하는 것 이외의 효과를 내기 위해서 생겨난 프로그래머블 파이프 라인이다. - 프로그래머가 GPU의 연산에 직접 관여할 수 있다. - 고정적으로 제공하던 셰이더( Shader )를 프로그래머가 다양한 효과를 낼 수 있게끔 제공하게 되었다. 고정 기능 파이프라인과 프로그래머블 파이프라인의 차이점 - 프로그래머가 GPU 연산에 관여할 수 있냐? 없냐? 차이 < 정확하게 말하면, Fixed -..
Low-Level Layer (HAL, HEL)
HAL이란 Hardware Abstraction Layer의 약자로서, 컴퓨터 하드웨어와 소프트웨어 사이의 추상화 계층이다. 다음과 같은 성격을 지닌다. 소프트웨어가 수많은 종류의 하드웨어 상에서 별 차이 없도록 동작할 수 있도록 하는 역할을 하며, OS의 커널 또는 장치 드라이버에서 호출될 수 있다. 추상화 개념을 사용하는데, 추상화는 주어진 문제나 시스템 중에서 중요하고 관계있는 부분만을 분리하여 간결하고 이해하기 쉽게 만드는 과정이라고 할 수 있다. 하드웨어 부품에 따라 해야 할 복잡한 과정을 일관성 있고, 간략한 인터페이스로 제공하기 위해 같은 류의 하드웨어를 공통 명령어 집합으로 묶어두는데, 이를 "하드웨어 추상화"라고 한다. 소프트웨어와 하드웨어 사이에서 소프트웨어가 PC의 시스템 메모리, C..
dxerr.lib(dxerrw.obj) : error LNK2019 해결방법
dxerr.lib(dxerrw.obj) : error LNK2019: __vsnwprintf 외부 기호(참조 위치: "long __stdcall StringVPrintfWorkerW(unsigned short *,unsigned int,unsigned int *,unsigned short const *,char *)" (?StringVPrintfWorkerW@@YGJPAGIPAIPBGPAD@Z) 함수)에서 확인하지 못했습니다. #pragma comment(lib, "legacy_stdio_definitions.lib") 포함
[실1] 2667 - 단지 번호 붙이기
#include #include #include #include #include #include using namespace std; #define TOTAL_SIZE 5000 #define y first #define x second pair dir[] { { 1, 0 }, // 상 {-1, 0 }, // 하 { 0,-1 }, // 좌 { 0, 1} // 우 }; vector res(TOTAL_SIZE); int map[TOTAL_SIZE][TOTAL_SIZE]{ 0 }; bool visited[TOTAL_SIZE][TOTAL_SIZE]; int b_size = 0; int idx = 0; void BFS(int _y, int _x) { // 탐색 시작 queue q; q.push({ _y, _x })..
C# Boxing Unboxing 박싱 언박싱 값>참조, 참조>값
Boxing ( 박싱 ) : 값 형식을 참조 형식으로 변환하는 것을 말한다. boxing은 암시적으로 발생한다. ( 예를 들어 int, float 를 object 로 변환하는 것을 말하는데 이 과정에서 단순 참조의 20배에 해당 하는 오버헤드와 메모리의 추가 사용이 발생한다. ) int test = 100; object tetsObj = test; UnBoxing ( 언박싱 ) : 참조 형식을 값 형식으로 변환하는 것을 말한다. Unboxing은 명시적으로 발생한다. ( 예를 들어 object를 int, float로 변환하는 것을 말하는데 이 과정에서 일반적인 할당의 4배에 달하는 시간이 소요된다. ) int test = 100; object testObj = test; int i = (int)test;..