본문 바로가기

C34

보초법(sentinel method) #define _CRT_SECURE_NO_WARNINGS #include #include #include #include void generate(int* ptr, int size, int mod) { srand((unsigned int)time(NULL)); int i; for (i = 0; i < size; i++) { ptr[i] = rand() % mod + 1; } } void PrintArr(int* ptr, int size) { int i; printf("생성한 배열 원소 출력\n"); for (i = 0; i < size; i++) { printf("%d ", ptr[i]); } } int Search(int* ptr, int num, int size) { ptr[size] = num; i.. 2023. 6. 27.
Dynamic-programming(동적기획법) : Dynamic-programming 알고리즘을 사용하는 대표적인 예로는 피보나치 수열이 있다 (1) dynamic-programming(top-down, memoization) 피보나치 수열을 구현하는 방법은 순환 호출과 반복문을 사용하는 방법이 있는데 순환 호출을 사용할 경우 예를 들어 int fibo(int num)이라는 함수를 호출하게 되면 같은 함수를 중복해서 호출하는 경우가 생기기에 비효율적이다. ex) fibo(6) fibo(6) fibo(4) fibo(5) fibo(2) fibo(3) fibo(3) fibo(4) fib(2) fibo(3) fibo(1) fibo(2) fibo(1) fibo(2) fibo(2) fibo(3) => 중복호출되는 함수들이 존재 => num값이 커질수록 중복현상.. 2023. 6. 8.
[C]Square and multiply 알고리즘 거듭제곱 순환 알고리즘을 배우다가 square-and-multiply 알고리즘을 알게 되었고 직접 구현을 시도하게 되었다. 이 알고리즘의 핵심은 ,1. X^n (mod p) 연산을 하고자 할 때 n을 2진수로 변환했을 때 , LSB가 1인지 여부를 확인한다 2. 지수의 2진수 값: 0 => 값을 제곱 : 1 => 값을 제곱 후 X를 곱한다 3. 다음 bit로 이동=> 이때, 기본설정으로 값을 제곱하는 이유는 비트가 LSB에서부터 하나씩 오른쪽으로 늘어나고있기때문에 전체적으로 값은 제곱이 된다. (1) 거듭제곱의 성질: 아래의 성질을 이용하여 지수승을 계산해줄때마다 mod 연산을 취해주면 오버플로우 현상을 방지할 수 있다. A^B(mod C) = ((A mod C)^B) (mod C) ex) 3^5 연산 .. 2023. 6. 8.
220810(CH26~27) CH26 1. #define _CRT_SECURE_NO_WARNINGS #include #include #define MUL(A,B,C) ((A)*(B)*(C)) #define ADD(A,B,C) ((A)+(B)+(C)) int main() { int a, b, c; printf("숫자 3개 입력:"); scanf("%d %d %d", &a, &b, &c); printf("세 정수의 합:%d\n", ADD(a, b, c)); printf("세 정수의 곱:%d\n", MUL(a, b, c)); return 0; } 2. #define _CRT_SECURE_NO_WARNINGS #include #include #define PI 3.14 #define AREA(R) ((R)*(R)*(PI)) int main.. 2022. 8. 10.
220809(CH25) #define _CRT_SECURE_NO_WARNINGS #include #include int main() { int* pi; pi = (int*)malloc(sizeof(int)); if (pi == NULL) { printf("동적 메모리 할당에 실패했습니다."); exit(1); } *pi = 100; printf("%d\n", *pi); //동적 메모리 사용한 이후에는 무조건 해당 메모리 반환 free(pi); } method1. #define _CRT_SECURE_NO_WARNINGS #include #include int main() { char arr[30]; int i = 0; for (i = 0; i < 26; i++) { arr[i] = 'a' + i; } for (i = 0; i <.. 2022. 8. 9.
220802(CH23) 1.공용체 공용체 변수를 이루는 멤버의 시작 주소 값 모두 동일 가장 큰 자료형을 기준으로 할당된다. EX)int mem1, int mem2, double mem3; 1)공용체 변수 -------------double------------ --mem1-- --mem2-- -------------mem3------------- 2)일반 구조체 변수 --int mem1-- --int mem2-- ---------double mem3-------- ex 23-4) 1. 프로그램 사용자로부터 int형 정수 하나를 입력 받을 것 2. 입력 받은 정수의 상위 2바이트와 하위 2바이트 값을 양의 정수로 출력할 것 3. 그 다음 상위 1바이트와 하위 1바이트에 저장된 값의 아스키 문자 출력할 것 #define _CRT.. 2022. 8. 2.