All Posts

[Discrete Mathematics] RSA 공개키 암호 시스템
·
Mathematics/Discrete Mathematics
공개키 암호 시스템 발신자와 수신자가 메시지를 외부에 노출하지 않으려면, 메시지를 은밀하게 보내는 방법도 사용할 수 있겠지만, 남들이 보더라도 무슨 말인지 알 수 없게 암호화하여 메시지를 보낼 수도 있을 것이다. 이때 발신자는 메시지를 암호화(encrypt)하여 수신자에게 보내야 할 것이고, 수신자는 받은 메시지를 복호화(decrypt)하여 확인해야 할 것이다.이러한 암호 시스템 중 하나가 공개키 암호 시스템인데, 개인키를 숨김으로써 메시지를 아무나 복호화할 수 없도록 하고, 공개키를 통해 암호화를 한다. 즉 절차는 다음과 같다.먼저 수신자가 공개키와 개인키를 만들어 발신자에게 공개키를 보낸다. 이때 개인키는 공개되지 않도록 하며 수신자만 확인할 수 있어야 한다.발신자는 수신자가 보낸 공개키를 이용하여 ..
[Data Structure] 연결 리스트를 통한 스택과 큐 구현
·
Data Structure & Algorithm/Data Structure
스택 기존 정적으로 구현한 스택은 스택의 크기가 유한하고, 한번 설정한 메모리 공간을 계속 사용한다는 단점이 있었다. 이를 연결 리스트로 구현하면 스택의 각 칸을 동적으로 할당하기 때문에 이러한 단점을 극복할 수 있다. 단 각 칸을 노드로 구현하기 때문에 칸 당 소비하는 메모리는 노드로 구현할 때 배열로 구현할 때보다 더 많다.기존에 스택은 top 변수를 배열 인덱스로 이용하였는데, 연결 리스트로 구현하게 된다면 헤드 포인터를 top 변수로 사용하게 된다.#include #include typedef int element;typedef struct Node { element data; struct Node* link;} Node;typedef struct { Node* top;} Stac..
[Data Structure] 이중 연결 리스트(doubly linked list)
·
Data Structure & Algorithm/Data Structure
이중 연결 리스트  연결 리스트를 원형으로 구현해도 자신을 가리키는 노드에는 접근할 수 없었기 때문에 근본적인 단점이 있었다. 이를 해결하기 위해 노드 링크를 좌측 노드 링크와 우측 노드 링크로 나누어 저장하는 이중 연결 리스트를 활용할 수 있다.이중 연결 리스트는 사용하는 노드가 링크를 좌측과 우측 두 개를 가지기 때문에 양방향 탐색이 가능하다. 단 그만큼 각 노드가 차지하는 메모리 공간이 크기 때문에 단점 역시 존재한다. 또한 장점을 살리려면 구현이 까다롭다는 단점이 있다.이중 연결 리스트는 단일 연결 리스트나 원형 연결 리스트처럼 헤드 포인터를 사용하는 것이 아니라 헤드 노드를 이용한다. 헤드 노드는 데이터가 없는 노드이다. 헤드 노드를 사용하여 시작 노드와 마지막 노드를 각각 우측 링크와 좌측 링..
[Data Structure] 원형 연결 리스트(circular linked list)
·
Data Structure & Algorithm/Data Structure
원형 연결 리스트  노드 링크로 다음 노드를 가리키게만 하여 끝에 가면 NULL을 가리키게 되는 단일 연결 리스트는 자신을 가리키는 노드에는 접근할 수 없다는 단점이 있다. 예를 들어 세 번째 노드에서는 두 번째 노드로 접근할 수 없다.이를 해결하기 위해 가장 끝 노드가 처음 노드를 가리키게 하여 원형으로 리스트를 구현하는 방법이 있다. 이를 원형 연결 리스트라 하며, 원형 연결 리스트에서는 어떤 노드에서든 다음 노드를 향해 가기만 하면 연결된 모든 노드에 도달 가능하다.기본적인 연산은 연결 리스트와 같지만, 헤드 포인터가 가리키는 곳이 마지막 노드이고, 헤드 포인터의 링크가 가리키는 곳이 시작 노드라는 점이 단일 연결 리스트와 차이이다. 구현 | C 연결 리스트 구현과 같이 구현하였다. 단 앞서 말한 ..
[C++] 클래스 상속(inheritance) 및 다중 상속
·
Language/C & C++
상속 상속이란 기반 클래스(base class)의 속성과 기능을 파생 클래스(derived class)에 물려주는 것이다. 즉 파생 클래스에서는 기반 클래스의 멤버 변수와 멤버 함수를 사용할 수 있다. 단 기반 클래스의 멤버 변수와 멤버 함수의 접근지정자가 private이면 파생 클래스에서 접근이 안된다. 상속을 통해서 기반 클래스에 있는 멤버 변수와 멤버 함수를 그대로 사용할 수 있으니 파생 클래스에서는 멤버 변수와 함수를 간결하게 작성할 수 있고, 클래스들 간 구조적 관계를 파악하기도 용이하다는 장점이 있다. 또한 클래스 재사용도 쉬워진다.클래스 상속 기본 문법은 다음과 같다.class DerivedName : accessmodifier BaseName { ....};accessmodifier ..
[Discrete Mathematics] 유클리드 호제법(Euclidean algorithm) 및 나머지 연산의 역원
·
Mathematics/Discrete Mathematics
유클리드 호제법 유클리드 호제법유클리드 호제법은 두 정수의 최대공약수를 찾기 위한 효율적인 알고리즘이다.$ a $ 가 음이 아닌 정수, $ b $ 가 양의 정수, $ r = a \bmod b $ 라면 $ \gcd(a, b) = \gcd(b, r) $ 이다. 이를 이용하여 $ a $ 에 $ b $ 를, $ b $ 에 $ r $ 을 대입하며 반복하다가 $ r $ 이 $ 0 $ 이 나온다면, $ b $ 가 최대공약수이다.이는 $ a $ 와 $ b $ 의 공약수의 집합이 $ b $ 와 $ r $ 의 공약수의 집합과 같다는 것을 보임으로써 증명 가능하다.몫과 나머지 정리에 의해 $ a = bq + r $ $ (0 \leq r (참고 링크). $ c \mid a $ 이고 $ c \mid bq $ 이므로 $ c \m..
[Discrete Mathematics] 정수 표현 및 알고리즘
·
Mathematics/Discrete Mathematics
정수 표현 흔히 정수를 십진법으로 표현한다. 이는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 를 사용하여 정수를 표현하는 방법으로 기호의 위치에 따라 10의 n 제곱을 곱한다. 예를 들어 $ 179 = 1 \times 10^2 + 7 \times 10^1 + 9 \times 10^0 $ 와 같이 나타내는 것이다.수를 나타내는 진법이 근거로 하는 수, 즉 십진법의 십과 같은 수를 그 진법의 기수(base)라 한다.이진법(binary number system)에서 정수를 표현할 때는 0 과 1 만이 필요하다. 예를 들어 $ 101101_2 = 1 \times 2^5 + 0 \times 2^4 + 1 \times 2^3 + 1 \times 2^2 + 0 \times 2^1 + 1 \times 2^0 ..
[Linear Algebra] 일차독립(linearly independent)과 일차종속(linearly dependent)
·
Mathematics/Linear Algebra
생성집합 (Spanning Set) $ V $ 가 벡터공간이고 $ V $ 의 원소인 $ \mathbf{x_1} $, $ \mathbf{x_2} $, $ \cdots $, $\mathbf{x_m} $ 에 대하여 $ k_1 \mathbf{x_1} + k_2 \mathbf{x_2}+ \cdots + k_m \mathbf{x_m} (k_1, k_2, \cdots, k_m \in \mathbb{R}) $ 를, 즉 각 벡터에 실수를 곱한 것을 $ \mathbf{x_1} $, $ \mathbf{x_2} $, $ \cdots $, $\mathbf{x_m} $의 일차결합(linear combination)이라 한다. 이를 활용하여 어떤 벡터를 어떤 벡터들의 일차결합으로 나타낼 수도 있다. 특히 $ V $ 가 벡터공간일 ..
[Java] Scanner 클래스를 이용한 입력
·
Language/Java
입력 import java.util.Scanner;java.util.Scanner 를 import 해주고 사용하면 된다.먼저 Scanner 객체를 만들어주고 사용해야 한다.Scanner sc = new Scanner(System.in);System.in 을 생성자에 매개변수로 넣어 표준입력을 사용한다.기본적으로 next 메소드를 이용하여 공백문자 전까지 입력받을 수 있고, nextLine 메소드를 이용하여 줄바꿈 문자, 즉 엔터 전까지 입력받을 수 있다. 이때 입력은 String 으로 반환한다. 단 nextLine 메소드를 이용할 때 직전 입력이 있다면 그 입력의 남은 개행문자를 받아와 입력이 종료될 수 있기 때문에 주의해야 한다.그 외 자료형으로 입력을 받고 싶다면 next 뒤에 자료형을 붙이면 된다...
[R] 다중변수 탐색적 자료 분석(EDA)
·
Language/R
기본적 자료 분석 다중변수는 열이 두 개 이상인 자료를 말한다. 이때 열을 필드, 변수라고도 하고, 따라서 열이 두 개 이상인 자료를 다중변수라고 한다. 보통 매트릭스나 데이터프레임을 활용하여 분석한다.str 함수를 통해 행과 열의 개수, 각 열의 이름과 그 열에 들어있는 자료의 자료형, 대략적인 자료 내용을 확인할 수 있다.str(data_name)iris 데이터를 확인해본다면 아래와 같이 나온다.'data.frame': 150 obs. of 5 variables: $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... $ Petal.L..
애스터로이드
'분류 전체보기' 카테고리의 글 목록 (9 Page)