본문 바로가기

프로그래밍16

Complexity Analysis (1) - Computational Complexity (계산 복잡도) 서문 (Preface) 안녕하세요, 정우 입니다. 오랜만에 새로운 알고리즘 관련 포스팅으로 찾아뵙네요. 앞으로는 알고리즘 및 자료 구조에 관한 게시글을이 대부분을 이룰 예정입니다. (중간 중간 Distributed Systems 나 좀 흥미로운 아키텍쳐에 관한 분석글도 올리도록 하겠습니다. 개요 (Overview) 이번 시리즈의 주제는 바로 "알고리즘의 효율성 분석" 입니다. 그 중에서도 가장 기본이 되는 각종 수학적 Notation (표기법) 들을 알아보도록 하겠습니다. 우선 들어가기에 앞서, 일반적으로 "알고리즘" 이라 하면 떠올리시는건 대부분 코딩을 먼저 떠올리실거라 생각합니다. 하지만, 알고리즘의 사전적 정의를 보자면: An algorithm is a finite sequence of well-d.. 2022. 4. 18.
마인크래프트 모더 (Modder) 마인크래프트 모딩 (Modding). 모딩이란 "수정하다" 라는 뜻의 "Modify" 에서 나온 말로, 소프트웨어와 관련해서는 특히 게임쪽에서 제 3자가 비영리목적으로 해당 게임의 소스를 수정 (보통 리버스 엔지니어링을 통해) 하거나 확장하는 행위이다. 게임 자체가 상업적인 소프트웨어이다 보니 저작권의 이유로 당연히 불법이지만 다양한 게임들이 API 를 제공해서 일정한 수준의 커스터마이징 가능한 자유도를 제공하거나, 마인크래프트처럼 커뮤니티가 주도해서 불법아닌 불법 (알지만 모르는척) 으로 리버스 엔지니어링을 통해 기존 기능을 수정, 확장하는 경우가 있다. 마인크래프트의 경우, 한국에서는 상대적으로 커뮤니티가 작지만 영어권에서는 Forge 를 주축으로 해서 각종 프레임워크/라이브러리도 오픈소스로 많이 만.. 2021. 8. 3.
마인크래프트 모드 개발하던 고딩에서 북미 백엔드 개발자가 되기까지 마지막으로 쓴 글이 대략 5년전인 2016년인걸 보고는 시간이 되게 빠르게 흐른다는걸 새삼 실감하게 됬다. 마인크래프트 모드 개발하겠다고 영어 공부하면서 Java, Spring, Gradle 등 기본적인 자바 개발 환경을 익히고 렌더링을 위해 선형대수나 OpenGL 등을 독학했던 거에서 이후 컬리지를 나오고 돈을 많이 버는 개발자가 되기 위해 토론토에서 웹개발에 뛰어들어 Javascript, React, Angular, Vue, Typescript, Redux, Vuex 등의 프론트엔드 프레임워크를 거쳐 .NET Framework, ASP.NET MVC, .NET Core, RESTful API 로 기본적인 백엔드 개발을 접하고 실제 풀스택 개발자로 일을 하면서 GraphQL, SingalR, WebSo.. 2021. 8. 3.
이진 탐색과 시간 복잡도 분석 (Binary Search and its Time Complexity Analysis) 오늘 다뤄 볼 주제는 바로 "이진 탐색(Binary Search)" 입니다. 높은 효율을 자랑하며 실제로 자주 쓰이는 알고리즘인데요, 과연 이진 탐색이라는 게 무엇인지 한번 알아봅시다! - 이진 탐색(Binary Search) : 이진 탐색이란, 정렬된 자료를 반으로 계속해서 나누어 탐색하는 방법입니다. 쉽게 말해, 아래와 같이 자료를 계속해서 반으로 쪼개서 찾는 것이죠. [자료 1] 이진 탐색 (Binary Search) 감이 잘 안오신다구요? 백문이 불여일견! 바로 C로 작성된 코드로 보시겠습니다~ int* binarySearch(int key, const int *target, size_t length) { int first = 0, last = length - 1, middle = (first +.. 2016. 9. 19.