알고리즘 & 자료구조 (13) 썸네일형 리스트형 [자료구조] 단일 연결 리스트(Singly Linked List) 단일 연결 리스트 단반향으로 노드들을 연결한 간단한 자료 구조 구현 // 연결 리스트의 노드 클래스 public class SinglyLinkedListNode { public T Data { get; set; } public SinglyLinkedListNode Next { get; set; } public SinglyLinkedListNode(T data) { this.Data = data; this.Next = null; } } public class SinglyLinkedList { // head를 사용하여 전체 리스트를 순차적으로 엑세스 private SinglyLinkedListNode head; public void Add(SinglyLinkedListNode newNode) { if (he.. [자료구조] 연결 리스트(Linked List) 연결 리스트 각 노드가 데이터와 포인터를 가지고 있으며, 노드들이 한 줄로 연결되어 있는 방식으로 데이터를 저장하는 자료구조 [자료구조] 원형 배열(Circular Array) 원형 배열 고정된 크기의 배열을 마치 양 끝이 연결된 것처럼 사용할 수 있게 한 자료구조. 배열의 크기가 N일 때, 배열의 마지막 요소(N-1)에 도착하면, 다음 배열요소는 첫번째 요소(0)로 순환하는 구조. 처음 들어간 데이터가 먼저 나오는 FIFO(First in first out) 구조의 데이터 버퍼에 적합. => 큐(Que) 비원형의 일반 배열은 마지막에 들어간 데이터가 먼저 나오는 LIFO(Last in first out) 구조의 버퍼에 적합하다 구현 mod 연산자를 사용하여 마지막 배열의 다음인덱스가 첫 배열 인덱스로 돌아오도록 구현 public static void printArray() { //원형탁자에 8명의 사람이 있다고 가정. // a, b, c, d, e, f, g, h // 이 때.. [자료구조] 배열(Array) 배열이란? 배열은 연속적인 메모리 상에 동일한 데이터 타입의 요소들을 순차적으로 일렬로 저장하는 자료구조. 순차적으로 나열된 배열요소는 각 요소마다 인덱스가 붙는다. ex) x[0], x[1].... 배열의 크기는 고정적이다. 배열 인덱스를 사용할 경우 배열요소에 즉시 엑세스할 수 있다. 배열의 차원(Dimension) 한 배열요소를 선택하기 위해 사용하는 인덱스의 수 C#은 32차원 배열까지 지원한다. 가변 배열(Jagged Array) 배열의 요소가 배열타입인 경우 ex) x[0] = new int[2]; x[1] = new int[6]{1, 2, 3, 4, 5, 6}; x[2] = new int[3]{9, 8, 7}; 동적 배열 (Dynamic Array) 정적 배열은 초기화 시 지정한 고정크기를 .. [자료구조] 자료구조(Data Structure)의 정의 자료구조 (Data Structure) 데이터를 효율적으로 접근하고 조작할 수 있도록 데이터의 구조를 만든 것 자료구조마다 장단점이 있기 때문에 자신의 목적에 맞는 자료구조를 선택해야 한다. 잘 설계된 자료구조를 사용하면 시간과 메모리를 효율적으로 사용할 수 있다. 추상자료형 (ADT) 알고리즘이 문제를 해결하는데 필요한 자료의 형태와 그 자료를 사용한 연산들을 수학적으로 정의한 모델 추상자료형과 자료구조의 차이 추상자료형은 무엇이 구현되어야 하는지 자료의 논리적 형태를 정의 자료구조는 어떻게 구현할 지를 파악해서 물리적 형태로 구현하는 것 예를 들어 스택(Stack)은 추상 자료형으로 마지막에 입력된 데이터가 먼저 사용된다. 스택은 자료구조 구현 측면에서 배열로도 구현할 수 있고, 연결 리스트 형태로 .. [암호학] 다중 치환 암호_비제네르(Vigenere) 암호 다중 치환 암호(Polyalphabetic Substitution Cipher) 하나의 문자가 서로 다른 여러 문자로 매핑 비제네르 암호 암호 간격을 문자마다 서로 다른 간격으로 이동시킨 것. 동일한 문자가 각각 다른 문자로 암호화 될 수 있는 다중치환 방식 ex) "ABCDEF" 를 암호화 하기 위해 키로 "BCD"를 사용 1. 키가 평문보다 작다면 평문의 길이만큼 Key를 반복 "BCDBCD" 2. 평문의 각 문자에 매핑되는 Key 문자의 인덱스만큼 문자를 평행 이동 첫 문자가 'A'이고, 매핑되는 Key는 'B' 이므로 'A' + 1 = 'B' 가 암호문자 두번째 문자가 'B' 이고 매핑되는 키는 'C' 이므로 'B' + 2 = 'D' 가 암호문자가 된다. A B C D E F B(+1) C(+2).. [암호학] 단일치환 암호_Affine 암호 Affine 암호 곱셈 암호와 덧셈 암호를 병합하여 구현한 것으로 2개의 Key를 갖는다. 첫번째 Key는 곱셈 암호의 키로서 역원을 갖는 곱셈 암호의 키 집합인 Z26*의 요소이고, 두번째 Key는 덧셈 암호의 키로서 알파벳 집합 Z26의 요소이다. C = (K1 * P + K2) mod 26 f(x) = (a * x + b) % 26 => 기울기가 a 이고, y 절편이 b인 직선의 방정식 또는 일차 함수 Affine 암호식은 다음과 같은 3가지 조건을 가진다. 1) 곱셈 암호키 a(K1)는 곱셈에 대한 역원을 가져야 하므로 26과 서로소이어야 한다. gcd(a,26) = 1 2) a는 0이 아니어야 하고, 1~25 사이의 값이다 3) b는 0 ~25 사이의 값이다. public class Affine.. [암호학] 모듈로 연산(Modular Artimetic) 모듈로 연산(Modular Artimetic) 나머지를 구하는 연산을 의미 - a mod n = r - a를 n으로 나눈 나머지는 r일 경우 위와 같은 식으로 표기. n은 모듈로라고 부르고 r은 나머지 라고 부른다. - a는 정수, n은 양의 정수, r은 0을 포함한 양의 정수 ex) 12 mod 11 = 1 -12 mod 11 = 10 => 원래는 -1이나 음수가 되면 안되므로 모듈로 11을 더해서 10 합동 (Congruence) 어떤 수로 나눈 나머지가 같을 때 - 3 mod 12 = 3 15 mod 12 = 3 => 3 ≡ 15 (mod12). 3과 15는 모듈로 12에 대해서 합동이다. 공역(Zn) - 어떤 함수를 적용하였을 경우 나올 수 있는 모든 값의 집합 - 합동식에서 모듈로 연산자를 적용.. 이전 1 2 다음