반응형

분류 전체보기 49

알고리즘 이진 탐색(Binary Search) 파이썬 예제

이진 탐색(Binary Search)은 정렬된 배열에서 특정한 값을 찾는 알고리즘입니다. 이 알고리즘은 배열을 반으로 나누어 찾고자 하는 값과 비교하면서 탐색 범위를 반으로 줄여가는 방식으로 동작합니다. 예를 들어, 오름차순으로 정렬된 다음과 같은 배열이 있다고 가정해봅시다. [1, 3, 5, 7, 9, 11, 13, 15] 이 배열에서 7을 찾는다면, 배열의 중간 값인 9와 비교하여 7이 9보다 작기 때문에 7이 존재할 수 있는 왼쪽 배열 `[1, 3, 5, 7]`에서 이진 탐색을 다시 수행합니다. 이번에는 왼쪽 배열의 중간 값인 3과 비교하여 7이 3보다 크기 때문에 오른쪽 배열 `[5, 7]`에서 이진 탐색을 다시 수행합니다. 이번에는 오른쪽 배열의 중간 값인 7이 7과 일치하기 때문에 7을 찾았습..

CS/알고리즘 2023.05.06

알고리즘 선택 정렬(Selection Sort) 예제

알고리즘 기초 예제로는 다양한 문제가 있지만, 여기서는 가장 기본적인 정렬 알고리즘 중 하나인 선택 정렬(Selection Sort) 예제를 들어보겠습니다. 선택 정렬은 주어진 배열에서 최소값을 찾아 맨 앞으로 보내는 과정을 반복하여 정렬하는 알고리즘입니다. 다음은 선택 정렬의 동작 과정을 설명한 pseudocode(의사 코드)입니다. SelectionSort(array A) for i = 0 to n-2 minIndex = i for j = i+1 to n-1 if A[j] < A[minIndex] minIndex = j swap A[i] and A[minIndex] 위의 pseudocode에서 `A`는 정렬할 배열, `n`은 배열의 크기입니다. 이제 위 pseudocode를 실제 코드로 구현해보겠습니..

CS/알고리즘 2023.05.06

자료구조 파이썬 스택(Stack) 예제

stack = [] stack.append(1) # push 1 stack.append(2) # push 2 stack.append(3) # push 3 print(stack.pop()) # pop 3 print(stack.pop()) # pop 2 스택(Stack)은 데이터를 일시적으로 저장하기 위한 자료구조로, 데이터를 한쪽 끝에서만 삽입하거나 삭제할 수 있는 선형 자료구조입니다. 이 때 한쪽 끝을 Top, 다른 쪽 끝을 Bottom이라고 부릅니다. Top에서 삽입과 삭제가 일어나기 때문에, Last In First Out(LIFO) 구조라고도 부릅니다. 파이썬에서 스택을 구현할 때는 리스트(List) 자료형을 사용하면 됩니다. 파이썬의 리스트는 동적 배열로 구현되어 있어서, 크기를 지정하지 않아도 ..

자료구조 C언어 미로찾기 예제

#include #include #include #include #define MAX_STACK_SIZE 100 /* 스택의 최대 길이 */ #define ROW_SIZE 11 /* 현 미로의 최대 행 길이 */ #define COL_SIZE 15 /* 현 미로의 최대 열 길이 */ #define TRUE 1 #define FALSE 0 typedef struct { /* 미로탐색 경로가 들어갈 스택 */ int row; int col; int dir; }element; element stack[MAX_STACK_SIZE]; int top = -1; /* 스택의 top변수 */ typedef struct { /* 8방향의 좌표를 가질 구조체 */ int vert; int horiz; }offsets; o..

카테고리 없음 2023.05.04

자료구조 C언어 스택(Stack) 예제

아래는 C 언어로 구현한 스택 예제입니다. #include #include #define MAX_STACK_SIZE 100 // 스택의 최대 크기를 정의합니다. typedef struct { int stack[MAX_STACK_SIZE]; // 스택을 배열로 구현합니다. int top; // 스택의 가장 위에 있는 데이터의 인덱스를 저장하는 변수입니다. } Stack; // 스택 초기화 함수입니다. void init_stack(Stack *s) { s->top = -1; // 가장 위에 있는 데이터의 인덱스를 -1로 초기화합니다. } // 스택이 꽉 차 있는지 확인하는 함수입니다. int is_full(Stack *s) { return s->top == MAX_STACK_SIZE - 1; // 스택이 꽉..

CS/자료구조 2023.05.04

자료구조 C언어 데크(Deque, Double-ended Queue) 예제

C 언어로 구현한 데크(Deque, Double-ended Queue) 예제입니다. 데크는 큐(Queue)와 유사한 자료구조로, 양쪽 끝에서 삽입과 삭제가 가능합니다. #include #include #define MAX_SIZE 100 // 데크의 최대 크기 int deque[MAX_SIZE]; int front = 0, rear = 0; // 데크의 앞과 뒤를 가리키는 포인터 // 데크가 비어있는지 확인하는 함수 int is_empty() { return front == rear; } // 데크가 가득 차있는지 확인하는 함수 int is_full() { return (rear + 1) % MAX_SIZE == front; } // 데크의 앞에서부터 데이터를 삭제하고 반환하는 함수 int dequeue..

CS/자료구조 2023.05.04

자료구조 C언어 큐(Queue) 예제

큐(Queue)는 데이터를 일시적으로 저장하는 자료구조로, 먼저 들어온 데이터가 먼저 나가는 선입선출(FIFO) 구조를 갖습니다. 큐는 일반적으로 줄 서기(linear queue)나 자동차 대기 줄(car queue) 등에서 사용됩니다. 큐는 크게 두 가지 연산을 지원합니다. Enqueue(삽입): 큐의 뒤쪽(rear)에 새로운 데이터를 추가하는 연산입니다. Dequeue(삭제): 큐의 앞쪽(front)에서 데이터를 삭제하고 반환하는 연산입니다. 큐는 일반적으로 배열(array)이나 연결 리스트(linked list)를 이용하여 구현됩니다. 배열을 이용한 구현에서는 큐의 앞과 뒤를 가리키는 포인터(front, rear)를 이용하여 삽입과 삭제 연산을 수행합니다. 연결 리스트를 이용한 구현에서는 각 노드가..

CS/자료구조 2023.05.04

RSA 암호화 C언어로 구현

RSA 암호화를 C 언어로 구현하는 방법에 대해 설명해드리겠습니다. RSA 암호화는 공개키 암호화 방식으로, 수학적인 개념을 기반으로 하고 있습니다. RSA 암호화에는 공개키와 개인키가 필요하며, 공개키로 암호화하고 개인키로 복호화하는 방식을 사용합니다. RSA 암호화를 구현하려면 다음과 같은 단계가 필요합니다. 두 소수 p, q를 선택하고, n = p * q를 계산합니다. φ(n) = (p-1) * (q-1)을 계산합니다. e와 φ(n)이 서로소인 값을 선택합니다. (보통 e는 65537을 사용합니다.) d * e = 1 mod φ(n)을 만족하는 d를 계산합니다. 공개키는 (n, e), 개인키는 (n, d)로 구성됩니다. RSA 암호화는 다음과 같은 방식으로 동작합니다. 평문 m을 입력받습니다. m을..

C언어로 표현한 AES (Advanced Encryption Standard)은 대칭키 암호화 알고리즘

AES (Advanced Encryption Standard)은 대칭키 암호화 알고리즘으로, DES와 같은 이전 암호화 알고리즘에 대한 대안으로 나타났습니다. AES는 더 높은 수준의 보안성과 성능을 제공합니다. AES는 블록 암호화 방식을 사용하며, 128 비트, 192 비트 또는 256 비트의 키를 사용할 수 있습니다. C언어로 작성된 AES 암호화 코드는 다음과 같이 작동합니다. 먼저, 사용자로부터 입력받은 평문(원본 메시지)을 128 비트 블록으로 나눕니다. 128 비트 블록은 각각 4 × 4 행렬로 변환됩니다. 128 비트 키를 입력으로 받습니다. 이 키는 4 × 4 행렬로 변환됩니다. 10 라운드(라운드: 암호화 알고리즘이 실행되는 단계)를 수행합니다. 각 라운드에서는 다음과 같은 단계를 수행..

DES(데이터 암호화 표준) 암호 C언어 알고리즘

DES(데이터 암호화 표준)는 블록 암호화 기술 중 하나로, 64비트 블록 크기와 56비트의 키 크기를 사용합니다. DES는 블록 단위로 데이터를 처리하며, 64비트 블록을 입력으로 받아 64비트 블록을 출력합니다. DES는 라운드 함수를 16회 수행하여 입력 블록을 출력 블록으로 변환합니다. #include unsigned long long int Plaintext = 0x123456ABCD132536; unsigned long long int Key1 = 0xAABB09182736CCDD; int InitialPermutationTable[64] = { 58, 50, 42, 34, 26, 18, 10, 2, 60, 52, 44, 36, 28, 20, 12, 4, 62, 54, 46, 38, 30, 2..

반응형