개발

    코딩 컨벤션 맛보기

    항상 말씀을 드리지만, 제가 기록하는 것은 제 위주로 적혀 있어 혼란을 야기할 수 있습니다. 그리고 제 자료를 머리에 저장하기 전, 여러번 구글링을 통해 정확한 자료를 머릿속에 저장하기를 부탁드립니다. 먼저, 코딩 컨벤션이란? 나 이외에 다른 사람들도 내가 작성한 코드를 보고 쉽고 빠르게 이해할 수 있도록 하나의 작성 표준 이 글에서 다룰 코딩 컨벤션은? 함수를 정의할 때, 지켜야 할 몇 가지 스텝을 말해보도록 한다. Step 1. 매개변수 이름을 더 잘 짓도록한다. - 함수의 매개변수 위치에 따라, 입력 매개변수 인지, 결과로 사용하는 매개변수인지 알 수 있도록 네이밍을 하도록한다. Step 2. 읽기전용 매개변수를 상수화 한다. - 결과가 아닌, 입력 매개변수는 읽기전용 지시어(const)를 사용한다..

    FltRegisterFilter 함수

    참고 자료 : https://docs.microsoft.com/en-us/windows-hardware/drivers/ddi/fltkernel/nf-fltkernel-fltregisterfilter?redirectedfrom=MSDN FltRegisterFilter function (fltkernel.h) - Windows drivers FltRegisterFilter registers a minifilter driver. docs.microsoft.com 함수 기능 : 미니 필터 드라이버를 등록한다 NTSTATUS FLTAPI FltRegisterFilter( PDRIVER_OBJECT Driver, const FLT_REGISTRATION *Registration, PFLT_FILTER *RetFil..

    퀵정렬(Quick sort)

    참고 블로그 : https://gmlwjd9405.github.io/2018/05/10/algorithm-quick-sort.html [알고리즘] 퀵 정렬(quick sort)이란 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 퀵 정렬은 분할 정복 알고리즘의 하나로서, 평균적으로 매우 빠른 수행 속도를 가지는 정렬 방법 퀵 정렬 알고리즘 특징 - 합병 정렬(merge sort)과 달리 리스트를 비 균등하게 분할 - 분할 정복 알고리즘 - 문제를 작은 2개의 문제로 분리하고 각각을 해결한 다음, 결과를 모아서 원래의 문제를 해결하는 전략 - 분할 정복 방법은 재귀 함수를 이용하여 구현 퀵정렬 과정 1. 리스트에서 한..

    빌드과정 ( 전처리, 컴파일, 어셈블리, 링킹 )

    빌드과정 ( 전처리, 컴파일, 어셈블리, 링킹 )

    이번에는 기본 중 기본 빌드과정에 알아보려합니다. 빌드과정 진짜 너무너무 쉬워서 무시할 수 있는데, 그래도 컴파일 언어를 쓴다면 다시 되짚어보면 좋은기회라 생각해 글을 올리게되었습니다. 먼저 C++ 기준으로 빌드과정을 설명 및 정리하겠습니다. 빌드과정은 1. Preprocessor (전처리기) - #define 같은 매크로나 지시자를 소스코드로 변경하고, cpp 확장자를 가진 파일이 i 파일이 된다. 2. Parser(문법검사) - 코드 문법을 검사하고, 문법에 따라 코드를 쪼갠다. 3. Translation (번역) - 소스코드를 어셈블리어로 번역하고, i파일이 s파일이 된다. 4. Assembler(번역) - 어셈블리어를 기계어만큼 낮은 수준의 언어로 번역하고, s파일이 o파일이 된다. ------여..

    합병 정렬(Merge sort)

    머지 소트, 합병 정렬 여러가지 이름으로 존재한다. 이해하면서 분할합병 정렬? 이라고 하는게 옳지 않나 싶다. 제일 먼저 합병 정렬에 큰 도움을 받은 블로그의 링크를 올려 놓는다. 링크 : https://gmlwjd9405.github.io/2018/05/08/algorithm-merge-sort.html [알고리즘] 합병 정렬(merge sort)이란 - Heee's Development Blog Step by step goes a long way. gmlwjd9405.github.io 합병 정렬은 '존 폰 노이만' 사람이 제안한 방법 -> 컴퓨터 구조를 배우면 먼저 볼 수 있는 사람. 합병 정렬은 분할 정복 알고리즘의 하나이다. -> 분할 정복 이란 -> 문제를 작은 2개의 문제로 분리하고 각각을 해..

    백준 13460번: 구슬 탈출 2

    문제 링크: https://www.acmicpc.net/problem/13460 13460번: 구슬 탈출 2 첫 번째 줄에는 보드의 세로, 가로 크기를 의미하는 두 정수 N, M (3 ≤ N, M ≤ 10)이 주어진다. 다음 N개의 줄에 보드의 모양을 나타내는 길이 M의 문자열이 주어진다. 이 문자열은 '.', '#', 'O', 'R', 'B' 로 이루어져 있다. '.'은 빈 칸을 의미하고, '#'은 공이 이동할 수 없는 장애물 또는 벽을 의미하며, 'O'는 구멍의 위치를 의미한다. 'R'은 빨간 구슬의 위치, 'B'는 파란 구슬의 위치이다. 입력되는 모든 보드 www.acmicpc.net 문제 해결 방법: BFS 또는 DFS인데, 기울이기가 한 칸씩 이동개념이랑 다르다. 테스트 케이스 2번째로 한 칸씩..

    x64와 x86의 차이

    먼저 어느정도 아시는 분이라면, x64는 64비트 x86은 32비트를 의미하는 것을 압니다. 즉, 이번 글에서는 32비트 프로그래밍과 64비트 프로그래밍의 차이에 대해서 알아보려합니다. 1. 32비트 vs 64비트 차이는 레지스터의 처리값 CPU는 I/O버스를 통해 데이터 내,외부로 전송합니다. 그 한 번에 데이터를 전송하는 양이 32bit, 64bit 입니다. 2. 32비트 컴퓨터와 64비트 컴퓨터 차이 RAM에서 표현할 수 있는 주소값에서 보인다. 2^32 = 2^2 * 2^30 = 4 * 2^30 = 4 GB 즉, 4GB 초과한 메모리 영역에는 참조할 수 없고, 32비트 CPU에서는 4GB RAM을 인식하지 못한다. 3. 궁금증 Q. 32bit 프로그램은 64bit 운영체제에서 작동하지 않는가? A..

    유니온 파인드(Union Find)

    이 글은 아래에 블로그를 참고하여 작성되었습니다. https://twpower.github.io/115-union-find-disjoint-set [Algorithm] 유니온 파인드(Union Find)와 서로소 집합(Disjoint Set) Practice makes perfect! twpower.github.io https://www.crocus.co.kr/683 유니온 파인드(Union Find, Disjoint Set) 유니온 파인드(Union Find)란? 유니온 파인드(Union Find)는 Disjoint Set라고도 불리기도 하며, 이 자료구조는 일상속에서 우리가 은연중에 접하는 자료구조이다. 예를 들어보자. 우리는 학창 시절에 수학여행을.. www.crocus.co.kr Disjoint ..

    최소 스패닝 트리 (Minimum Spanning Tree, MST)

    참고 블로그 : https://www.crocus.co.kr/733 정의 : - 그래프에서 그래프의 모든 정점을 연결하되, 사이클이 존재하지 않도록 모든 정점을 간선으로 연결하는 것을 의미 - 최소 스패닝 트리는 무조건 하나의 그래프에서 하나만 생성된다고는 보장하지는 못한다. 최소 스패닝 트리 알고리즘 1. 크루스칼 알고리즘 - 모든 간선에 대해 가장 가중치가 작은 간선부터 연결해주면서 최소 스패닝 트리를 만들어 나가는 알고리즘을 의미 - 크루스칼 알고리즘 자체가 유니온 파인드 자료구조 기반으로 생성된다 --> 유니온 파인드 자료구조를 공부한 경험이 있으나, 위에 참고한 블로그에서는 더 쉽고, 자세히 설명되어있어 다시 게시글을 올릴예정 - 크루스칼 알고리즘의 시간 복잡도 : O(ElogE) 2. 프림 알..

    STL (Standard Template Library)

    - 표준 C++ 라이브러리 - 프로그램에 필요한 자료구조와 알고리즘을 템플릿으로 제공하는 라이브러리 - 자료구조와 알고리즘은 서로 반복자라는 구성 요소를 통해 연결 구성 : 컨테이너, 반복자, 알고리즘, 함수 객체, 어댑터, 할당기 --> 다 구체적으로 설명하지 않을 것 1. 컨테이너(Container) - 데이터를 저장하는 객체 - 연속 컨테이너, 연관 컨테이너 2. 반복자(Iterator) - 컨테이너의 원소를 가리키고, 가리키는 원소에 접근하여 다음 원소를 가리키게 하는 기능 3. 알고리즘(Algorithm) - 정렬, 삭제, 검색, 연산 등을 해결하는 일반화된 방법을 제공하는 함수 템플릿 4. 함수 객체(Function Object) - 함수처럼 동작하는 객체로 operator() 연산자를 오버로..