전체 글 169

[C++/알고리즘] 퀵 정렬 (Quick Sort)

참고: https://powerclabman.tistory.com/12 [C++/알고리즘] 분할정복 (Divide and Conquer) + 병합정렬 (Merge Sort) 📕 개요 '분할 정복 알고리즘'이란, 엄청나게 크고 방대한 문제를 해결할 수 있는 단위까지 쪼개서 해결한 다음 그것들을 다시 합쳐서 원래의 문제를 해결하고자 하는 알고리즘 기법입니다. 그 powerclabman.tistory.com 📕 개요 퀵 정렬 또한 '분할정복 알고리즘' 기법을 사용해서 빠르게 배열을 정렬하는 알고리즘입니다. 먼저, 퀵 정렬의 아이디어부터 한 번 살펴보도록 합시다. 1. 피벗(Pivot)을 정합니다. 피벗은 임의의 '기준'을 뜻합니다. 2. 피벗을 기준으로 피벗 왼쪽에는 '피벗 보다 작은 값'을 두고, 피벗 오른..

[C++/알고리즘] 분할정복 (Divide and Conquer) + 병합정렬 (Merge Sort)

📕 개요 '분할 정복 알고리즘'이란, 엄청나게 크고 방대한 문제를 해결할 수 있는 단위까지 쪼개서 해결한 다음 그것들을 다시 합쳐서 원래의 문제를 해결하고자 하는 알고리즘 기법입니다. 그림처럼 '큰 문제'를 '부분 문제'로 계속해서 분할합니다. 그리고 '부분 문제'를 해결하고, 해답을 조합하여서 원래 문제에 대한 해답을 얻어 내고자 하는 것이 이 알고리즘의 핵심입니다. 논리는 다음과 같습니다. 1. 분할 (Divide) 큰 문제를 매우 작은 부분 문제로 분할합니다. 2. 정복 (Conquer) 가장 작은 단위의 부분 문제를 해결합니다. 3. 조합 (Combine) 하위 문제에 대한 결과를 조합하여, 원래 문제의 답을 얻어 냅니다. 분할 정복법은 대부분 '재귀' 로 구현됩니다. 다음은 분할 정복 알고리즘으..

[C++] scanf 가 위험한 이유, scanf 와 cin 의 차이점

scanf는 C 언어의 입력 함수입니다. 만약, 7 바이트 사이즈의 char형 string 변수에 'Crabman' 을 입력하면 어떻게 될까요? #define _CRT_SECURE_NO_WARNINGS #include using namespace std; int main() { char string[7]; scanf("%s", string); //Crabman 을 입력하고 싶어! return 0; } 정답은 '오류가 발생한다.'입니다. 보통 프로그램에서 '문자열'은 종단에 '널문자 (\0)'를 추가하여 문자열의 끝맺음을 해줍니다. H e l l o \0 이런 느낌이죠. 그런데, 기본적으로 scanf는 입력 버퍼의 최대 크기를 모릅니다. 그렇기에 7바이트의 버퍼에 문자열을 할당하는 순간 펑! '배열의 크기..

언어/C, C++ 2023.12.24

[C++] 비둘기집 원리와 응용

📗 비둘기집 원리4개의 집이 있고 5마리의 비둘기가 있을 때 모든 비둘기에게 집을 할당하려면 '무조건' 중복된 집 할당이 생깁니다. 원리라고 부르기도 민망할 정도로 당연하고 직관적입니다. 살짝 확장을 해보자면 366명의 학생이 있을 때, 윤년을 고려하지 않으면 적어도 1명은 다른 한 명과 생일이 겹치겠죠? 이것이 '비둘기집 원리'입니다. 이 원리가 문제를 해결하는 데 있어, 존재를 증명할 때 종종 쓰이곤 합니다. 다음 예시를 통해 알아보도록 합시다. 📕 Decreasing Sequence 문제1. 문제 주어진 두 정수 L과 R이 있을 때 다음 조건을 만족하는 가장 작은 양의 정수 N을 찾아라. N% L > N%(L+1) >... > N%(R-1) > N% R 2. 입력 L = 4, R = 6을 입력했을 ..

[C++] 해밍 거리 (Hamming Distance)

참고: https://powerclabman.tistory.com/4 [C++] Bitwise Operator와 빠른 홀수, 짝수 찾기 📕 비트 연산자의 개념 비트 연산은 '2진수' 연산을 뜻하는데, 특정 연산자를 이용해서 이진 수로 표현된 정수에 대하여 논리적인 연산을 수행합니다. 2진수 연산은 10진수 연산에 익숙한 사람에 powerclabman.tistory.com 📕 해밍 거리란? 같은 길이의 두 문자열에서, 같은 위치에서 서로 다른 기호들이 몇 개인지 세는 것을 뜻합니다. 두 문자열 A, B가 다음과 같을 경우 A = 1011 B = 1001 밑줄 친 부분을 고려하면, 해밍 거리는 1이 되겠죠 A = Hello! B = Halro! 이 경우에는 해밍 거리는 2가 됩니다. 저는 '비트 연산'을 활..

[C++] Bitwise Operator와 빠른 홀수, 짝수 찾기

📕 비트 연산자의 개념 비트 연산은 '2진수' 연산을 뜻하는데, 특정 연산자를 이용해서 이진 수로 표현된 정수에 대하여 논리적인 연산을 수행합니다. 2진수 연산은 10진수 연산에 익숙한 사람에겐 매우 생소한 개념일 수밖에 없습니다. 그러나, 컴퓨터와 같은 기계장치들의 근간은 2진수의 집합으로 이루어져 있기에 비트 연산을 사용하면, 컴퓨터 입장에서 매우 빠르게 연산할 수 있게 됩니다. 게임과 같은 매 프레임 반복적인 연산을 필요로 하는 프로그램을 개발할 때 단순한 곱셈이나 비교 연산을 비트 연산으로 치환해 주면 최적화하는데 도움이 될 수 있습니다. 📗 C++에서의 비트 연산자 1. & AND 연산입니다. 피연산자가 모두 1(참) 일 경우 결괏값은 참이 됩니다. A B A&B 0 0 0 0 1 0 1 0 0..

2023-12-23 공부계획

24년 3월 1일까지 겨울방학이 진행됩니다. 학기도중 너무나도 바빠서 진행하지 못했던 공부들 방학을 맞이하여 차근차근 시작해보려고 합니다. 공부할 큰 줄기는 다음과 같습니다. 1. 언리얼엔진 공부 2. Direct X 공부 3. C++ 언어 4. 게임 엔진 역설계 5. 알고리즘 및 자료구조 아마 매일 알고리즘 문제 풀이 1문제를 기본으로 하여서 C++언어 + 언리얼엔진 공부가 추가적으로 들어갈 것이고 알고리즘과 자료구조와 병행하여서 공부가 진행될 듯 합니다. 그 뒤에는 Direct X 공부 그 뒤에는 게임 엔진 역설계 및 간단한 게임 프로젝트 진행이 되겠네요. 아마 게임 엔진 역설계 및 게임 프로젝트 진행은 '시리즈'로 진행될 듯 합니다. 일단 여기까지 계획하고 공부중에 필요한 것들 조금씩 추가하게 될 ..

공부 계획 2023.12.23

개발 블로그를 시작했습니다.

안녕하세요. 개발자를 꿈꾸고 있는 학생입니다. 지금부터 개발 관련하게 공부한 내용들을 정리하는 방식으로 블로그를 운영하려고 합니다. 누가 봐줬으면 하여 적는 것이 아니고 공부 기록용, 나중에 와서 참조할 코드 저장용으로 기록하는 것이라. 가독성이 안좋을 수 있습니다. 제가 알아보는 것이 1순위라 그렇습니다. 아직 학생이라 매우 부족하기에 댓글은 언제나 환영입니다. 블로그 이름에 '힘쎈개발자'라는 형용사가 들어간 이유는 아무래도 '힘'과 '개발'이 저를 매우 잘나타내는 단어라서 그렇습니다. 별 다른 이유없고, 운동이랑 개발 둘 다 좋아합니다. 어찌됐든 제가 보기위한 제 블로그 시작합니다.

잡담 2023.12.23