[WSA] Visual Studio에서 inet_ntoa( ) 대체하기
·
Programming Languages/C
문제점 Visual Studio에서 권장하지 않는 함수들( 'scanf', fopen', 'strcpy') 사용시 Warning C4996 경고가 발생한다. 소켓 프로그래밍의 경우, inet_ntoa( ) 함수 사용시 IPv4만 지원해 해당 경고가 발생한다. inet_ntoa 뜻: network-to-address, 비트 단위 IP 주소를 문자열 주소값으로 변환한다. n = network : 비트 단위 IP 주소값 + 빅 엔디언 (네트워크는 비트 단위로 통신한다.) a = address : 문자열 단위 IP 주소값 + 리틀 엔디언 해결책 1. Visual Studio 경고를 무시 #define _CRT_SECURE_NO_WARNINGS #pragma warning(disable:4996) 2. inet_..
[WSA] WinSock 실행 흐름
·
Programming Languages/C
소켓 통신 프로그래밍 API / 클래스 설명 제공 기능 OS/PL Unix Socket API 네트워크 표준 API TCP, UDP 등 다양한 네트워크에 사용 Unix(Ubuntu, Redhat..) Win WinSock2 API Socket API 윈도우 버전 Window(C/C++) C# .NET Sockets WinSock2 API C# 버전 Window(C#) TcpClient Sockets 클래스 내재됨 TCP, UDP 전용 TcpListner UdpClient 윈도우 소켓 실행 흐름 WSA(WinSock API) WSAStartup( ) : winsock 초기화 : 반드시 프로그램에서 요구하는 winsock 버전을 명시하고, 라이브러리 초기화를 진행해야 한다. #include int WSASt..
16 셸 정렬
·
Programming Languages/C
셸 정렬이란? : 단순 삽입 정렬의 장점을 살리고 단점 보완 : 정렬 횟수는 증가하지만, 전체적인 요소 이동 횟수 감소 단순 삽입 정렬의 특징 복잡도 O(n^1.25) 불안전
15 단순 삽입 정렬
·
Programming Languages/C
단순 삽입 정렬이란? : 선택한 요소를 알맞은 위치에 삽입하는 작업 반복 단순 정렬(버블, 선택, 삽입) 의 시간 복잡도는 O(n^2) 효율이 좋지 않다.
14 단순 선택 정렬
·
Programming Languages/C
단순 선택 정렬이란? : 가장 작은 요소부터 알맞은 위치로 정렬하는 알고리즘 불안전한 정렬 : 중복시 위치가 변한다.
13 버블 정렬, 칵테일 정렬
·
Programming Languages/C
버블 정렬: 이웃한 두 요소의 비교, 교환을 반복해 정렬 패스(Pass): 비교, 교환 작업 버블 정렬 구현 교환 횟수는 비교 횟수 = (n - 1) + (n - 2) + 1 = n(n - 1) / 2 의 절반인 n(n - 1) / 4 swap 함수 안에서 값의 이동이 3회 발생하므로 평균 3n(n - 1) / 4 버블 정렬 개선안(1) 버블 정렬 개선안(2) 칵테일 정렬 이 배열은 맨 앞 요소(9) 때문에 빠른 시간 안에 정렬 작업을 마칠 수 없다. 그래서 패스의 방향을 교대로 바꾸는 방식(칵테일 정렬)을 사용한다. /*--- 양방향 버블 정렬(칵테일 셰이커 정렬) ---*/ void shaker(int a[], int n) { int left = 0; int right = n - 1; int last..
12 정렬이란?
·
Programming Languages/C
정렬(Sorting)이란? : 특정 핵심 항목(key)의 대소 관계에 따라 데이터의 집합을 일정한 순서로 만드는 작업 : 정렬을 통해 검색을 빠르게 할 수 있다. 오름차순(Ascending), 내림차순(Descending) 안정성(Stable)이란? : 같은 값의 키를 가진 요소의 순서가 정렬 전후에도 유지되는 것 정렬 알고리즘의 핵심 요소 : 교환, 선택, 삽입 내부 정렬, 외부 정렬 : 내부 정렬(Internal Sorting) - 정렬할 모든 데이터가 하나의 배열에 저장 할 있는 경우 : 외부 정렬(External Sorting) - 정렬할 데이터가 너무 많아서, 하나의 배열에 저장 할 수 없는 경우
11 8퀸 문제
·
Programming Languages/C
8퀸 문제란? : 서로 공격 할 수 없도록 8개의 퀸은 8x8 체스판에 놓는 문제 1. 8 x 8 체스판, 64칸 에 8개의 퀸을 놓을 수 있는 조합 2. [규칙1] 각 열에 1개씩 배치 3. [규칙2] 각 행에 1개식 배치 3. [규칙3] 대각선 겹침 해결
10 하노이의 탑
·
Programming Languages/C
하노이의 탑(Top of Hanoi) 1. 하노의 탑 룰 2. 하노이의 탑 그룹핑 - 작은 문제로 분해 3. 하노이의 탑 그룹핑 룰 - 작은 문제의 반복 4. 하노이의 탑 구현
09 재귀 알고리즘 분석
·
Programming Languages/C
재귀의 이해는 컴퓨터의 실행 구조를 이해하는데 효과적이다. 분석 방법 1. 하향식(top down) 2. 상향식(bottom up) 3. 비재귀적 구현 1. 하향식(top down) 2. 상향식(bottom up) 3. 비재귀적 표현 재귀 함수를 재귀 호출을 사용하지 않고 구현하는 방법 3.1 꼬리 재귀 제거 방법 3.2 재귀 재거 방법
08 재귀와 유클리드 호제법
·
Programming Languages/C
유클리드 호제법(Euclidean method of mutual division) : 두 정수의 최대 공약수(Greatest Common Divisor)를 재귀적으로 구하는 방법
07 재귀와 순차곱셈(Factorial)
·
Programming Languages/C
재귀(recursive)란? : 순차곱셈(Factorial) :음이 아닌 정수 n의 순사곱셈(n!) 정의 1. 0! = 1 2. n > 0 이면, n! = n x (n-1)! = 10! = 10 x 9! = 10 x 9 x 8! = 10 x 9 x 8 x 7! ...
ubiquitous4g