CS 9

[CPP] 간단하게 구조체 형태의 소켓 버퍼 만들기

#pragma pack(push) #pragma pack(1) // 구조체 패딩 비트 적용X union DataBuf { struct Info { int a; dobule b; char name[10]; }; Info info; // 데이터 정보 char buf[sizeof(struct Info)]; // Socket 통신용 데이터 버퍼 } #pragma pack(pop) 구조체 생성시 자동으로 할당되는 패딩 바이트를 #pragma pack(1)으로 없에 준다. union으로 구조체와 buf간의 데이터를 공유하게 만듦으로서 간단하게 통신용 구조체 버퍼를 만들 수 있다.

CS/네트워크 2024.01.14

[운영체제] 메모리 구조 (코드, 데이터, 스택, 힙)

목록 코드 영역 데이터 영역 힙 영역 스택 영역 프로그램이 실행되는 동안 사용되는 메모리의 구조에 대해 알아보겠습니다. 프로그램이 실행되면 운영체제는 해당 프로그램을 위한 메모리 공간을 할당하게 됩니다. 이 메모리 공간은 주로 코드, 데이터, 힙, 스택 영역으로 나뉘어집니다. 1. 코드(Code) 영역 코드 영역은 프로그램의 실행 코드가 저장되는 곳입니다. CPU가 직접 실행하는 명령어들이 이곳에 위치하며, 프로그램의 명령어들이 메모리에 로드되어 실행됩니다. 코드 영역은 실행 중에 수정되지 않으며, 읽기 전용으로 사용됩니다. 프로그램이 종료될 때 까지 남아있습니다. 2. 데이터(Data) 영역 데이터 영역은 전역 변수와 정적 변수들이 저장되는 곳입니다. 프로그램 시작 시 할당되고 프로그램 종료 시 해제되..

CS/운영체제 2024.01.08

[컴퓨터 구조] 비트 논리 연산과 활용

논리 연산 1. AND 두 개의 비트가 모두 1이면 결과 데이터가 1이고 하나라도 0이라면 결과 데이터가 0으로 됨 1 0 1 1 0 0 1 1 0 0 ------------ 0 0 1 0 0 2. OR 연산되는 비트들 중 하나라도 1이면 결과 데이터가 0으로 됨 1 0 1 1 0 0 1 1 0 0 ------------ 1 1 1 1 0 3. XOR 연산되는 두 비트가 다르면 1 같으면 0의 결과가 나옴 1 0 1 1 0 0 1 1 0 0 ------------ 1 1 0 1 0 4. NOT 데이터의 비트들이 모두 반전된다. 즉 1이면 0, 0이면 1로 변함 0 1 1 0 0 ------------ 1 0 0 1 1 활용 1. 선택적-세트 연산 데이터의 특정 비트들을 1로 세트해주기 위한 동작으로서, ..

CS 2024.01.07

[컴퓨터 구조] 나눗셈 연산이 곱셈 연산보다 느린 이유

HTML 삽입 미리보기할 수 없는 소스 곱셈 연산 1100x 피승수 1011 승수 Booth 알고리즘 곱셈연산은 승수의 마지막 값(Q)과 이전 승수의 값(Q-1)의 비트를 판단 후 1) 더하기 + 시프트 2) 빼기 + 시프트 3) 시프트 위 셋 중 하나의 연산을 진행함 나눗셈 피제수의 비트들을 좌측에서부터 우측으로 차례대로 검사하여, 그 비트들이 나타내느 값이 제수보다 같거나 큰 경우가 될 때 재수가 피제수를 나눌 수 있게 될 때 까지 한 비트씩 이동하면서 검사를 반복한다. 그렇게 될 떄까지 몫으로는 좌에서 우로가면서 '0'을 채운다. 나눌 수 있게 되면, 몫의 해당 비트를 '1'로 쓰고, 부분 피제수의 값에서 제수를 뺀다. 결론 1. 나눗셈은 피제수가 제수에 의해 나눠지는지 확인하는 작업이 필요하다. ..

CS 2024.01.06

퀵 정렬(quick sort) 알고리즘

퀵소트(quick sort) 알고리즘 머지소트와 비슷하게 분할 정복 기반이며 O(nlogN)의 시간복잡도를 가지고 있다. 그리고 머지 소트와 다르게 분할 정복 시 공간이 더 필요하지 않은 장점이 있다. 단점은 최악의 경우 O(n^2)의 시간복잡도를 가질 수 있으며 이는 설계를 통해 계선을 해야한다. 위에 단점의 이유로 C++ STL에서는 퀵소트, 머지 소트, 삽입 정렬을 섞어서 사용하고 있다. 알고리즘 구현 P: 피봇이며 피봇의 왼쪽은 피봇보다 작은 수 오른쪽은 피봇보다 큰 수로 정렬 된다. L: 피봇보다 큰 수를 왼쪽에서 오른쪽 순으로 찾는다 R: 피봇보다 작은 수를 오른쪽에서 왼쪽 순으로 찾는다. 1. 피봇을 선택 한다. 2. L과 R을 정해진 방향으로 움직여 해당되는 수를 찾는다. 3. 해당되는 수..

CS/알고리즘 2023.12.28

[알고리즘] 부채꼴 충돌 검사 - 내적 문제

내적 한 벡터를 다른 벡터에 정사영시켜 그 힘의 값을 얻는 공식 a라는 줄을 b의 방향으로 당길때 발생하는 힘 v1과 v2를 내적하는 공식 v1 (a, b, c) v2 (k, h, w) a*k + b*h + c*w = v1 벡터의 크기 * v2 벡터의 크기 * cos세타 fabs(sqrt(a*a + b*b + c*c)) * fabs(sqrt(k*k + h*h + w*w)) * cos(r) 위 배경지식을 이용해 본 문제를 해결해보자. 본 문제는 리그오브레전드의 애쉬 스킬에 피격당하는 적을 판별하고 리스트에 담아서 리턴하는 문제이다. 그래프로 표현해보면 다음과 같다. 문제: 부채꼴 범위의 스킬을 사용하는 캐릭터가 있다 부채꼴 범위에 있다면 무조건 피격당하며 아닌 경우 피격당하지 않는다. 이때 피격을 당하는 ..

CS/알고리즘 2023.12.27

재귀_동적_프로그래밍

swexpertacademy.com/main/learn/course/lectureHtmlViewer.do#none SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com 문제2) Merge Sort, 크기 n인 배열을 입력으로 받아, 배열을 절반으로 두 개로 나눈 후, 각작은 배열을 재귀적으로 정렬하고, 그 결과를 Merge 한다. ------- merge mergeSort(A): if len(A) == 1: return A else: mid = len(A)//2 # 몫 mergeSort(A[0 : mid]) # 앞부분 합병 mergeSort(A[mid : len(A)]) # 뒷부분 합병 merge() # 합병 ---..

CS/알고리즘 2021.03.01

논리증명

swexpertacademy.com/main/learn/course/lectureHtmlViewer.do#none SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! swexpertacademy.com m.blog.naver.com/PostView.nhn?blogId=l2060&logNo=220627137838&proxyReferer=https:%2F%2Fwww.google.com%2F 제1장 1.1~1.6 명제와 결합자, 항진명제, 함의, 동치, 모순, 연역적추론, 한정규칙 + 응용: 디지털회 목차 (1.1~1.6 집합론)1.1 명제와 결합자1.2 나머지 세 결합자1.3 항진명제, 함의, 동치 Tautology, Impl... blog.naver...

CS/알고리즘 2021.02.28